--- old/src/hotspot/share/gc/g1/heapRegionManager.cpp 2018-11-19 17:21:05.453914600 -0800 +++ new/src/hotspot/share/gc/g1/heapRegionManager.cpp 2018-11-19 17:21:04.551167400 -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,