1.1 --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Jan 16 10:29:12 2015 +0100 1.2 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Tue Apr 07 10:53:51 2015 +0200 1.3 @@ -1904,6 +1904,25 @@ 1.4 guarantee(_task_queues != NULL, "task_queues allocation failure."); 1.5 } 1.6 1.7 +G1RegionToSpaceMapper* G1CollectedHeap::create_aux_memory_mapper(const char* description, 1.8 + size_t size, 1.9 + size_t translation_factor) { 1.10 + // Allocate a new reserved space, preferring to use large pages. 1.11 + ReservedSpace rs(size, true); 1.12 + G1RegionToSpaceMapper* result = 1.13 + G1RegionToSpaceMapper::create_mapper(rs, 1.14 + size, 1.15 + rs.alignment(), 1.16 + HeapRegion::GrainBytes, 1.17 + translation_factor, 1.18 + mtGC); 1.19 + if (TracePageSizes) { 1.20 + gclog_or_tty->print_cr("G1 '%s': pg_sz=" SIZE_FORMAT " base=" PTR_FORMAT " size=" SIZE_FORMAT " alignment=" SIZE_FORMAT " reqsize=" SIZE_FORMAT, 1.21 + description, rs.alignment(), p2i(rs.base()), rs.size(), rs.alignment(), size); 1.22 + } 1.23 + return result; 1.24 +} 1.25 + 1.26 jint G1CollectedHeap::initialize() { 1.27 CollectedHeap::pre_initialize(); 1.28 os::enable_vtime(); 1.29 @@ -1977,57 +1996,35 @@ 1.30 ReservedSpace g1_rs = heap_rs.first_part(max_byte_size); 1.31 G1RegionToSpaceMapper* heap_storage = 1.32 G1RegionToSpaceMapper::create_mapper(g1_rs, 1.33 + g1_rs.size(), 1.34 UseLargePages ? os::large_page_size() : os::vm_page_size(), 1.35 HeapRegion::GrainBytes, 1.36 1, 1.37 mtJavaHeap); 1.38 heap_storage->set_mapping_changed_listener(&_listener); 1.39 1.40 - // Reserve space for the block offset table. We do not support automatic uncommit 1.41 - // for the card table at this time. BOT only. 1.42 - ReservedSpace bot_rs(G1BlockOffsetSharedArray::compute_size(g1_rs.size() / HeapWordSize)); 1.43 + // Create storage for the BOT, card table, card counts table (hot card cache) and the bitmaps. 1.44 G1RegionToSpaceMapper* bot_storage = 1.45 - G1RegionToSpaceMapper::create_mapper(bot_rs, 1.46 - os::vm_page_size(), 1.47 - HeapRegion::GrainBytes, 1.48 - G1BlockOffsetSharedArray::N_bytes, 1.49 - mtGC); 1.50 + create_aux_memory_mapper("Block offset table", 1.51 + G1BlockOffsetSharedArray::compute_size(g1_rs.size() / HeapWordSize), 1.52 + G1BlockOffsetSharedArray::N_bytes); 1.53 1.54 ReservedSpace cardtable_rs(G1SATBCardTableLoggingModRefBS::compute_size(g1_rs.size() / HeapWordSize)); 1.55 G1RegionToSpaceMapper* cardtable_storage = 1.56 - G1RegionToSpaceMapper::create_mapper(cardtable_rs, 1.57 - os::vm_page_size(), 1.58 - HeapRegion::GrainBytes, 1.59 - G1BlockOffsetSharedArray::N_bytes, 1.60 - mtGC); 1.61 - 1.62 - // Reserve space for the card counts table. 1.63 - ReservedSpace card_counts_rs(G1BlockOffsetSharedArray::compute_size(g1_rs.size() / HeapWordSize)); 1.64 + create_aux_memory_mapper("Card table", 1.65 + G1SATBCardTableLoggingModRefBS::compute_size(g1_rs.size() / HeapWordSize), 1.66 + G1BlockOffsetSharedArray::N_bytes); 1.67 + 1.68 G1RegionToSpaceMapper* card_counts_storage = 1.69 - G1RegionToSpaceMapper::create_mapper(card_counts_rs, 1.70 - os::vm_page_size(), 1.71 - HeapRegion::GrainBytes, 1.72 - G1BlockOffsetSharedArray::N_bytes, 1.73 - mtGC); 1.74 - 1.75 - // Reserve space for prev and next bitmap. 1.76 + create_aux_memory_mapper("Card counts table", 1.77 + G1BlockOffsetSharedArray::compute_size(g1_rs.size() / HeapWordSize), 1.78 + G1BlockOffsetSharedArray::N_bytes); 1.79 + 1.80 size_t bitmap_size = CMBitMap::compute_size(g1_rs.size()); 1.81 - 1.82 - ReservedSpace prev_bitmap_rs(ReservedSpace::allocation_align_size_up(bitmap_size)); 1.83 G1RegionToSpaceMapper* prev_bitmap_storage = 1.84 - G1RegionToSpaceMapper::create_mapper(prev_bitmap_rs, 1.85 - os::vm_page_size(), 1.86 - HeapRegion::GrainBytes, 1.87 - CMBitMap::mark_distance(), 1.88 - mtGC); 1.89 - 1.90 - ReservedSpace next_bitmap_rs(ReservedSpace::allocation_align_size_up(bitmap_size)); 1.91 + create_aux_memory_mapper("Prev Bitmap", bitmap_size, CMBitMap::mark_distance()); 1.92 G1RegionToSpaceMapper* next_bitmap_storage = 1.93 - G1RegionToSpaceMapper::create_mapper(next_bitmap_rs, 1.94 - os::vm_page_size(), 1.95 - HeapRegion::GrainBytes, 1.96 - CMBitMap::mark_distance(), 1.97 - mtGC); 1.98 + create_aux_memory_mapper("Next Bitmap", bitmap_size, CMBitMap::mark_distance()); 1.99 1.100 _hrm.initialize(heap_storage, prev_bitmap_storage, next_bitmap_storage, bot_storage, cardtable_storage, card_counts_storage); 1.101 g1_barrier_set()->initialize(cardtable_storage);