comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 647:bd441136a5ce

Merge
author kvn
date Thu, 19 Mar 2009 09:13:24 -0700
parents ba50942c8138 660978a2a31a
children 96b229c54d1e
comparison
equal deleted inserted replaced
640:ba50942c8138 647:bd441136a5ce
1420 _cg1r = new ConcurrentG1Refine(); 1420 _cg1r = new ConcurrentG1Refine();
1421 1421
1422 // Reserve the maximum. 1422 // Reserve the maximum.
1423 PermanentGenerationSpec* pgs = collector_policy()->permanent_generation(); 1423 PermanentGenerationSpec* pgs = collector_policy()->permanent_generation();
1424 // Includes the perm-gen. 1424 // Includes the perm-gen.
1425
1426 const size_t total_reserved = max_byte_size + pgs->max_size();
1427 char* addr = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop);
1428
1425 ReservedSpace heap_rs(max_byte_size + pgs->max_size(), 1429 ReservedSpace heap_rs(max_byte_size + pgs->max_size(),
1426 HeapRegion::GrainBytes, 1430 HeapRegion::GrainBytes,
1427 false /*ism*/); 1431 false /*ism*/, addr);
1432
1433 if (UseCompressedOops) {
1434 if (addr != NULL && !heap_rs.is_reserved()) {
1435 // Failed to reserve at specified address - the requested memory
1436 // region is taken already, for example, by 'java' launcher.
1437 // Try again to reserver heap higher.
1438 addr = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop);
1439 ReservedSpace heap_rs0(total_reserved, HeapRegion::GrainBytes,
1440 false /*ism*/, addr);
1441 if (addr != NULL && !heap_rs0.is_reserved()) {
1442 // Failed to reserve at specified address again - give up.
1443 addr = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop);
1444 assert(addr == NULL, "");
1445 ReservedSpace heap_rs1(total_reserved, HeapRegion::GrainBytes,
1446 false /*ism*/, addr);
1447 heap_rs = heap_rs1;
1448 } else {
1449 heap_rs = heap_rs0;
1450 }
1451 }
1452 }
1428 1453
1429 if (!heap_rs.is_reserved()) { 1454 if (!heap_rs.is_reserved()) {
1430 vm_exit_during_initialization("Could not reserve enough space for object heap"); 1455 vm_exit_during_initialization("Could not reserve enough space for object heap");
1431 return JNI_ENOMEM; 1456 return JNI_ENOMEM;
1432 } 1457 }