44 private: |
44 private: |
45 G1MappingChangedListener* _listener; |
45 G1MappingChangedListener* _listener; |
46 protected: |
46 protected: |
47 // Backing storage. |
47 // Backing storage. |
48 G1PageBasedVirtualSpace _storage; |
48 G1PageBasedVirtualSpace _storage; |
49 size_t _commit_granularity; |
49 |
50 size_t _region_granularity; |
50 size_t _region_granularity; |
51 // Mapping management |
51 // Mapping management |
52 BitMap _commit_map; |
52 BitMap _commit_map; |
53 |
53 |
54 G1RegionToSpaceMapper(ReservedSpace rs, size_t commit_granularity, size_t region_granularity, MemoryType type); |
54 G1RegionToSpaceMapper(ReservedSpace rs, size_t used_size, size_t page_size, size_t region_granularity, MemoryType type); |
55 |
55 |
56 void fire_on_commit(uint start_idx, size_t num_regions, bool zero_filled); |
56 void fire_on_commit(uint start_idx, size_t num_regions, bool zero_filled); |
57 public: |
57 public: |
58 MemRegion reserved() { return _storage.reserved(); } |
58 MemRegion reserved() { return _storage.reserved(); } |
59 |
59 |
68 |
68 |
69 bool is_committed(uintptr_t idx) const { |
69 bool is_committed(uintptr_t idx) const { |
70 return _commit_map.at(idx); |
70 return _commit_map.at(idx); |
71 } |
71 } |
72 |
72 |
73 virtual void commit_regions(uintptr_t start_idx, size_t num_regions = 1) = 0; |
73 virtual void commit_regions(uint start_idx, size_t num_regions = 1) = 0; |
74 virtual void uncommit_regions(uintptr_t start_idx, size_t num_regions = 1) = 0; |
74 virtual void uncommit_regions(uint start_idx, size_t num_regions = 1) = 0; |
75 |
75 |
76 // Creates an appropriate G1RegionToSpaceMapper for the given parameters. |
76 // Creates an appropriate G1RegionToSpaceMapper for the given parameters. |
|
77 // The actual space to be used within the given reservation is given by actual_size. |
|
78 // This is because some OSes need to round up the reservation size to guarantee |
|
79 // alignment of page_size. |
77 // The byte_translation_factor defines how many bytes in a region correspond to |
80 // The byte_translation_factor defines how many bytes in a region correspond to |
78 // a single byte in the data structure this mapper is for. |
81 // a single byte in the data structure this mapper is for. |
79 // Eg. in the card table, this value corresponds to the size a single card |
82 // Eg. in the card table, this value corresponds to the size a single card |
80 // table entry corresponds to. |
83 // table entry corresponds to in the heap. |
81 static G1RegionToSpaceMapper* create_mapper(ReservedSpace rs, |
84 static G1RegionToSpaceMapper* create_mapper(ReservedSpace rs, |
82 size_t os_commit_granularity, |
85 size_t actual_size, |
|
86 size_t page_size, |
83 size_t region_granularity, |
87 size_t region_granularity, |
84 size_t byte_translation_factor, |
88 size_t byte_translation_factor, |
85 MemoryType type); |
89 MemoryType type); |
86 }; |
90 }; |
87 |
91 |