34 class G1MappingChangedListener {
35 public:
36 // Fired after commit of the memory, i.e. the memory this listener is registered
37 // for can be accessed.
38 // Zero_filled indicates that the memory can be considered as filled with zero bytes
39 // when called.
40 virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled) = 0;
41 };
42
43 // Maps region based commit/uncommit requests to the underlying page sized virtual
44 // space.
45 class G1RegionToSpaceMapper : public CHeapObj<mtGC> {
46 private:
47 G1MappingChangedListener* _listener;
48 protected:
49 // Backing storage.
50 G1PageBasedVirtualSpace _storage;
51
52 size_t _region_granularity;
53 // Mapping management
54 CHeapBitMap _commit_map;
55
56 MemoryType _memory_type;
57
58 G1RegionToSpaceMapper(ReservedSpace rs, size_t used_size, size_t page_size, size_t region_granularity, size_t commit_factor, MemoryType type);
59
60 void fire_on_commit(uint start_idx, size_t num_regions, bool zero_filled);
61 public:
62 MemRegion reserved() { return _storage.reserved(); }
63
64 size_t reserved_size() { return _storage.reserved_size(); }
65 size_t committed_size() { return _storage.committed_size(); }
66
67 void set_mapping_changed_listener(G1MappingChangedListener* listener) { _listener = listener; }
68
69 virtual ~G1RegionToSpaceMapper() {}
70
71 bool is_committed(uintptr_t idx) const {
72 return _commit_map.at(idx);
73 }
74
75 void commit_and_set_special();
76 virtual void commit_regions(uint start_idx, size_t num_regions = 1, WorkGang* pretouch_workers = NULL) = 0;
77 virtual void uncommit_regions(uint start_idx, size_t num_regions = 1) = 0;
78
79 // Creates an appropriate G1RegionToSpaceMapper for the given parameters.
80 // The actual space to be used within the given reservation is given by actual_size.
81 // This is because some OSes need to round up the reservation size to guarantee
82 // alignment of page_size.
83 // The byte_translation_factor defines how many bytes in a region correspond to
84 // a single byte in the data structure this mapper is for.
85 // Eg. in the card table, this value corresponds to the size a single card
86 // table entry corresponds to in the heap.
87 static G1RegionToSpaceMapper* create_mapper(ReservedSpace rs,
88 size_t actual_size,
89 size_t page_size,
90 size_t region_granularity,
91 size_t byte_translation_factor,
92 MemoryType type);
93
|
34 class G1MappingChangedListener {
35 public:
36 // Fired after commit of the memory, i.e. the memory this listener is registered
37 // for can be accessed.
38 // Zero_filled indicates that the memory can be considered as filled with zero bytes
39 // when called.
40 virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled) = 0;
41 };
42
43 // Maps region based commit/uncommit requests to the underlying page sized virtual
44 // space.
45 class G1RegionToSpaceMapper : public CHeapObj<mtGC> {
46 private:
47 G1MappingChangedListener* _listener;
48 protected:
49 // Backing storage.
50 G1PageBasedVirtualSpace _storage;
51
52 size_t _region_granularity;
53 // Mapping management
54 CHeapBitMap _region_commit_map;
55
56 MemoryType _memory_type;
57
58 G1RegionToSpaceMapper(ReservedSpace rs, size_t used_size, size_t page_size, size_t region_granularity, size_t commit_factor, MemoryType type);
59
60 void fire_on_commit(uint start_idx, size_t num_regions, bool zero_filled);
61 public:
62 MemRegion reserved() { return _storage.reserved(); }
63
64 size_t reserved_size() { return _storage.reserved_size(); }
65 size_t committed_size() { return _storage.committed_size(); }
66
67 void set_mapping_changed_listener(G1MappingChangedListener* listener) { _listener = listener; }
68
69 virtual ~G1RegionToSpaceMapper() {}
70
71 void commit_and_set_special();
72 virtual void commit_regions(uint start_idx, size_t num_regions = 1, WorkGang* pretouch_workers = NULL) = 0;
73 virtual void uncommit_regions(uint start_idx, size_t num_regions = 1) = 0;
74
75 // Creates an appropriate G1RegionToSpaceMapper for the given parameters.
76 // The actual space to be used within the given reservation is given by actual_size.
77 // This is because some OSes need to round up the reservation size to guarantee
78 // alignment of page_size.
79 // The byte_translation_factor defines how many bytes in a region correspond to
80 // a single byte in the data structure this mapper is for.
81 // Eg. in the card table, this value corresponds to the size a single card
82 // table entry corresponds to in the heap.
83 static G1RegionToSpaceMapper* create_mapper(ReservedSpace rs,
84 size_t actual_size,
85 size_t page_size,
86 size_t region_granularity,
87 size_t byte_translation_factor,
88 MemoryType type);
89
|