--- old/src/hotspot/share/gc/g1/heapRegionManager.cpp 2018-11-19 14:07:06.706353100 -0800 +++ new/src/hotspot/share/gc/g1/heapRegionManager.cpp 2018-11-19 14:07:05.736880400 -0800 @@ -27,7 +27,9 @@ #include "gc/g1/g1ConcurrentRefine.hpp" #include "gc/g1/heapRegion.hpp" #include "gc/g1/heapRegionManager.inline.hpp" +#include "gc/g1/heterogeneousHeapRegionManager.hpp" #include "gc/g1/heapRegionSet.inline.hpp" +#include "gc/shared/collectorPolicy.hpp" #include "memory/allocation.hpp" #include "utilities/bitMap.inline.hpp" @@ -54,18 +56,25 @@ }; HeapRegionManager::HeapRegionManager() : - _regions(), _heap_mapper(NULL), _prev_bitmap_mapper(NULL), _next_bitmap_mapper(NULL), _bot_mapper(NULL), _cardtable_mapper(NULL), _card_counts_mapper(NULL), - _free_list("Free list", new MasterFreeRegionListChecker()), _available_map(mtGC), _num_committed(0), - _allocated_heapregions_length(0) + _allocated_heapregions_length(0), + _regions(), _heap_mapper(NULL), + _free_list("Free list", new MasterFreeRegionListChecker()) { } +HeapRegionManager* HeapRegionManager::create_manager(G1CollectedHeap* heap, CollectorPolicy* policy) { + if (heap->is_hetero_heap()) { + return new HeterogeneousHeapRegionManager((uint)(policy->max_heap_byte_size() / HeapRegion::GrainBytes) /*heap size as num of regions*/); + } + return new HeapRegionManager(); +} + void HeapRegionManager::initialize(G1RegionToSpaceMapper* heap_storage, G1RegionToSpaceMapper* prev_bitmap, G1RegionToSpaceMapper* next_bitmap, @@ -514,7 +523,7 @@ #endif // PRODUCT HeapRegionClaimer::HeapRegionClaimer(uint n_workers) : - _n_workers(n_workers), _n_regions(G1CollectedHeap::heap()->_hrm._allocated_heapregions_length), _claims(NULL) { + _n_workers(n_workers), _n_regions(G1CollectedHeap::heap()->_hrm->_allocated_heapregions_length), _claims(NULL) { assert(n_workers > 0, "Need at least one worker."); uint* new_claims = NEW_C_HEAP_ARRAY(uint, _n_regions, mtGC); memset(new_claims, Unclaimed, sizeof(*_claims) * _n_regions);