28 #include "gc/z/zBitMap.hpp"
29 #include "gc/z/zGenerationId.hpp"
30 #include "memory/allocation.hpp"
31 #include "runtime/atomic.hpp"
32
33 class ObjectClosure;
34
35 class ZLiveMap {
36 friend class ZLiveMapTest;
37
38 private:
39 static const uint32_t NumSegments = 64;
40 static const uint32_t BitsPerObject = 2;
41
42 const uint32_t _segment_size;
43 const int _segment_shift;
44
45 Atomic<uint32_t> _seqnum;
46 Atomic<uint32_t> _live_objects;
47 Atomic<size_t> _live_bytes;
48 BitMap::bm_word_t _segment_live_bits;
49 BitMap::bm_word_t _segment_claim_bits;
50 ZBitMap _bitmap;
51
52 const BitMapView segment_live_bits() const;
53 const BitMapView segment_claim_bits() const;
54
55 BitMapView segment_live_bits();
56 BitMapView segment_claim_bits();
57
58 BitMap::idx_t segment_start(BitMap::idx_t segment) const;
59 BitMap::idx_t segment_end(BitMap::idx_t segment) const;
60
61 bool is_segment_live(BitMap::idx_t segment) const;
62 bool set_segment_live(BitMap::idx_t segment);
63
64 BitMap::idx_t first_live_segment() const;
65 BitMap::idx_t next_live_segment(BitMap::idx_t segment) const;
66 BitMap::idx_t index_to_segment(BitMap::idx_t index) const;
67
70 void initialize_bitmap();
71
72 void reset(ZGenerationId id);
73 void reset_segment(BitMap::idx_t segment);
74
75 size_t do_object(ObjectClosure* cl, zaddress addr) const;
76
77 template <typename Function>
78 void iterate_segment(BitMap::idx_t segment, Function function);
79
80 public:
81 ZLiveMap(uint32_t object_max_count);
82 ZLiveMap(const ZLiveMap& other) = delete;
83
84 void reset();
85
86 bool is_marked(ZGenerationId id) const;
87
88 uint32_t live_objects() const;
89 size_t live_bytes() const;
90
91 bool get(ZGenerationId id, BitMap::idx_t index) const;
92 bool set(ZGenerationId id, BitMap::idx_t index, bool finalizable, bool& inc_live);
93
94 void inc_live(uint32_t objects, size_t bytes);
95
96 template <typename Function>
97 void iterate(ZGenerationId id, Function function);
98
99 BitMap::idx_t find_base_bit(BitMap::idx_t index);
100 BitMap::idx_t find_base_bit_in_segment(BitMap::idx_t start, BitMap::idx_t index);
101 };
102
103 #endif // SHARE_GC_Z_ZLIVEMAP_HPP
|
28 #include "gc/z/zBitMap.hpp"
29 #include "gc/z/zGenerationId.hpp"
30 #include "memory/allocation.hpp"
31 #include "runtime/atomic.hpp"
32
33 class ObjectClosure;
34
35 class ZLiveMap {
36 friend class ZLiveMapTest;
37
38 private:
39 static const uint32_t NumSegments = 64;
40 static const uint32_t BitsPerObject = 2;
41
42 const uint32_t _segment_size;
43 const int _segment_shift;
44
45 Atomic<uint32_t> _seqnum;
46 Atomic<uint32_t> _live_objects;
47 Atomic<size_t> _live_bytes;
48 Atomic<uint32_t> _will_expand_objects;
49 BitMap::bm_word_t _segment_live_bits;
50 BitMap::bm_word_t _segment_claim_bits;
51 ZBitMap _bitmap;
52
53 const BitMapView segment_live_bits() const;
54 const BitMapView segment_claim_bits() const;
55
56 BitMapView segment_live_bits();
57 BitMapView segment_claim_bits();
58
59 BitMap::idx_t segment_start(BitMap::idx_t segment) const;
60 BitMap::idx_t segment_end(BitMap::idx_t segment) const;
61
62 bool is_segment_live(BitMap::idx_t segment) const;
63 bool set_segment_live(BitMap::idx_t segment);
64
65 BitMap::idx_t first_live_segment() const;
66 BitMap::idx_t next_live_segment(BitMap::idx_t segment) const;
67 BitMap::idx_t index_to_segment(BitMap::idx_t index) const;
68
71 void initialize_bitmap();
72
73 void reset(ZGenerationId id);
74 void reset_segment(BitMap::idx_t segment);
75
76 size_t do_object(ObjectClosure* cl, zaddress addr) const;
77
78 template <typename Function>
79 void iterate_segment(BitMap::idx_t segment, Function function);
80
81 public:
82 ZLiveMap(uint32_t object_max_count);
83 ZLiveMap(const ZLiveMap& other) = delete;
84
85 void reset();
86
87 bool is_marked(ZGenerationId id) const;
88
89 uint32_t live_objects() const;
90 size_t live_bytes() const;
91 uint32_t will_expand_objects() const;
92
93 bool get(ZGenerationId id, BitMap::idx_t index) const;
94 bool set(ZGenerationId id, BitMap::idx_t index, bool finalizable, bool& inc_live);
95
96 void inc_live(uint32_t objects, size_t bytes);
97 void inc_will_expand(uint32_t objects);
98
99 template <typename Function>
100 void iterate(ZGenerationId id, Function function);
101
102 BitMap::idx_t find_base_bit(BitMap::idx_t index);
103 BitMap::idx_t find_base_bit_in_segment(BitMap::idx_t start, BitMap::idx_t index);
104 };
105
106 #endif // SHARE_GC_Z_ZLIVEMAP_HPP
|