23 */ |
23 */ |
24 |
24 |
25 #ifndef SHARE_GC_G1_G1EDENREGIONS_HPP |
25 #ifndef SHARE_GC_G1_G1EDENREGIONS_HPP |
26 #define SHARE_GC_G1_G1EDENREGIONS_HPP |
26 #define SHARE_GC_G1_G1EDENREGIONS_HPP |
27 |
27 |
|
28 #include "gc/g1/g1RegionsOnNodes.hpp" |
28 #include "gc/g1/heapRegion.hpp" |
29 #include "gc/g1/heapRegion.hpp" |
29 #include "runtime/globals.hpp" |
30 #include "runtime/globals.hpp" |
30 #include "utilities/debug.hpp" |
31 #include "utilities/debug.hpp" |
31 |
32 |
32 class G1EdenRegions { |
33 class G1EdenRegions { |
33 private: |
34 private: |
34 int _length; |
35 int _length; |
35 // Sum of used bytes from all retired eden regions. |
36 // Sum of used bytes from all retired eden regions. |
36 // I.e. updated when mutator regions are retired. |
37 // I.e. updated when mutator regions are retired. |
37 volatile size_t _used_bytes; |
38 volatile size_t _used_bytes; |
|
39 G1RegionsOnNodes _regions_on_node; |
38 |
40 |
39 public: |
41 public: |
40 G1EdenRegions() : _length(0), _used_bytes(0) { } |
42 G1EdenRegions() : _length(0), _used_bytes(0), _regions_on_node() { } |
41 |
43 |
42 void add(HeapRegion* hr) { |
44 virtual uint add(HeapRegion* hr) { |
43 assert(!hr->is_eden(), "should not already be set"); |
45 assert(!hr->is_eden(), "should not already be set"); |
44 _length++; |
46 _length++; |
|
47 return _regions_on_node.add(hr); |
45 } |
48 } |
46 |
49 |
47 void clear() { _length = 0; _used_bytes = 0; } |
50 void clear() { |
|
51 _length = 0; |
|
52 _used_bytes = 0; |
|
53 _regions_on_node.clear(); |
|
54 } |
48 |
55 |
49 uint length() const { return _length; } |
56 uint length() const { return _length; } |
|
57 uint regions_on_node(uint node_index) const { return _regions_on_node.count(node_index); } |
50 |
58 |
51 size_t used_bytes() const { return _used_bytes; } |
59 size_t used_bytes() const { return _used_bytes; } |
52 |
60 |
53 void add_used_bytes(size_t used_bytes) { |
61 void add_used_bytes(size_t used_bytes) { |
54 _used_bytes += used_bytes; |
62 _used_bytes += used_bytes; |