src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Tue Jul 2 17:37:39 2013
--- new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Tue Jul 2 17:37:39 2013
*** 2000,2013 ****
--- 2000,2014 ----
// HeapWordSize).
guarantee(HeapWordSize == wordSize, "HeapWordSize must equal wordSize");
size_t init_byte_size = collector_policy()->initial_heap_byte_size();
size_t max_byte_size = collector_policy()->max_heap_byte_size();
+ size_t heap_alignment = collector_policy()->max_alignment();
// Ensure that the sizes are properly aligned.
Universe::check_alignment(init_byte_size, HeapRegion::GrainBytes, "g1 heap");
! Universe::check_alignment(max_byte_size, HeapRegion::GrainBytes, "g1 heap");
! Universe::check_alignment(max_byte_size, heap_alignment, "g1 heap");
_cg1r = new ConcurrentG1Refine(this);
// Reserve the maximum.
PermanentGenerationSpec* pgs = collector_policy()->permanent_generation();
*** 2027,2062 ****
--- 2028,2063 ----
// Since max_byte_size is aligned to the size of a heap region (checked
// above), we also need to align the perm gen size as it might not be.
size_t total_reserved = 0;
total_reserved = add_and_check_overflow(total_reserved, max_byte_size);
! size_t pg_max_size = (size_t) align_size_up(pgs->max_size(), HeapRegion::GrainBytes);
! size_t pg_max_size = (size_t) align_size_up(pgs->max_size(), heap_alignment);
total_reserved = add_and_check_overflow(total_reserved, pg_max_size);
Universe::check_alignment(total_reserved, HeapRegion::GrainBytes, "g1 heap and perm");
! char* addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::UnscaledNarrowOop);
! ReservedHeapSpace heap_rs(total_reserved, HeapRegion::GrainBytes,
! ReservedHeapSpace heap_rs(total_reserved, heap_alignment,
UseLargePages, addr);
if (UseCompressedOops) {
if (addr != NULL && !heap_rs.is_reserved()) {
// Failed to reserve at specified address - the requested memory
// region is taken already, for example, by 'java' launcher.
// Try again to reserver heap higher.
! addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::ZeroBasedNarrowOop);
! ReservedHeapSpace heap_rs0(total_reserved, HeapRegion::GrainBytes,
! ReservedHeapSpace heap_rs0(total_reserved, heap_alignment,
UseLargePages, addr);
if (addr != NULL && !heap_rs0.is_reserved()) {
// Failed to reserve at specified address again - give up.
! addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::HeapBasedNarrowOop);
assert(addr == NULL, "");
! ReservedHeapSpace heap_rs1(total_reserved, HeapRegion::GrainBytes,
! ReservedHeapSpace heap_rs1(total_reserved, heap_alignment,
UseLargePages, addr);
heap_rs = heap_rs1;
} else {
heap_rs = heap_rs0;
}
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File