--- a/src/hotspot/share/gc/g1/g1RegionToSpaceMapper.hpp Fri Dec 21 18:26:55 2018 +0000
+++ b/src/hotspot/share/gc/g1/g1RegionToSpaceMapper.hpp Fri Dec 21 08:18:59 2018 -0800
@@ -70,6 +70,7 @@
return _commit_map.at(idx);
}
+ void commit_and_set_special();
virtual void commit_regions(uint start_idx, size_t num_regions = 1, WorkGang* pretouch_workers = NULL) = 0;
virtual void uncommit_regions(uint start_idx, size_t num_regions = 1) = 0;
@@ -87,6 +88,37 @@
size_t region_granularity,
size_t byte_translation_factor,
MemoryType type);
+
+ static G1RegionToSpaceMapper* create_heap_mapper(ReservedSpace rs,
+ size_t actual_size,
+ size_t page_size,
+ size_t region_granularity,
+ size_t byte_translation_factor,
+ MemoryType type);
};
+// G1RegionToSpaceMapper implementation where
+// part of space is mapped to dram and part to nv-dimm
+class G1RegionToHeteroSpaceMapper : public G1RegionToSpaceMapper {
+private:
+ size_t _pages_per_region;
+ ReservedSpace _rs;
+ G1RegionToSpaceMapper* _dram_mapper;
+ uint _num_committed_dram;
+ uint _num_committed_nvdimm;
+ uint _start_index_of_nvdimm;
+ uint _start_index_of_dram;
+ size_t _page_size;
+ size_t _commit_factor;
+ MemoryType _type;
+
+public:
+ G1RegionToHeteroSpaceMapper(ReservedSpace rs, size_t used_size, size_t page_size, size_t region_granularity, size_t commit_factor, MemoryType type);
+ bool initialize();
+ uint num_committed_dram() const;
+ uint num_committed_nvdimm() const;
+
+ virtual void commit_regions(uint start_idx, size_t num_regions = 1, WorkGang* pretouch_workers = NULL);
+ virtual void uncommit_regions(uint start_idx, size_t num_regions = 1);
+};
#endif // SHARE_VM_GC_G1_G1REGIONTOSPACEMAPPER_HPP