src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp

changeset 7781
33e421924c67
parent 7686
fb69749583e8
child 7782
30e04eba9e29
     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);

mercurial