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