73 // Release memory reserved in the space.
74 rs.release();
75 }
76 return false;
77 }
78
79 #ifdef ASSERT
80 extern size_t mark_bitmap_count;
81 extern size_t mark_bitmap_size;
82 #endif // #ifdef ASSERT
83
84 bool
85 ParMarkBitMap::mark_obj(HeapWord* addr, size_t size)
86 {
87 const idx_t beg_bit = addr_to_bit(addr);
88 if (_beg_bits.par_set_bit(beg_bit)) {
89 const idx_t end_bit = addr_to_bit(addr + size - 1);
90 bool end_bit_ok = _end_bits.par_set_bit(end_bit);
91 assert(end_bit_ok, "concurrency problem");
92 DEBUG_ONLY(Atomic::inc(&mark_bitmap_count));
93 DEBUG_ONLY(Atomic::add(size, &mark_bitmap_size));
94 return true;
95 }
96 return false;
97 }
98
99 inline bool
100 ParMarkBitMap::is_live_words_in_range_in_cache(ParCompactionManager* cm, HeapWord* beg_addr) const {
101 return cm->last_query_begin() == beg_addr;
102 }
103
104 inline void
105 ParMarkBitMap::update_live_words_in_range_cache(ParCompactionManager* cm, HeapWord* beg_addr, oop end_obj, size_t result) const {
106 cm->set_last_query_begin(beg_addr);
107 cm->set_last_query_object(end_obj);
108 cm->set_last_query_return(result);
109 }
110
111 size_t
112 ParMarkBitMap::live_words_in_range_helper(HeapWord* beg_addr, oop end_obj) const
113 {
|
73 // Release memory reserved in the space.
74 rs.release();
75 }
76 return false;
77 }
78
79 #ifdef ASSERT
80 extern size_t mark_bitmap_count;
81 extern size_t mark_bitmap_size;
82 #endif // #ifdef ASSERT
83
84 bool
85 ParMarkBitMap::mark_obj(HeapWord* addr, size_t size)
86 {
87 const idx_t beg_bit = addr_to_bit(addr);
88 if (_beg_bits.par_set_bit(beg_bit)) {
89 const idx_t end_bit = addr_to_bit(addr + size - 1);
90 bool end_bit_ok = _end_bits.par_set_bit(end_bit);
91 assert(end_bit_ok, "concurrency problem");
92 DEBUG_ONLY(Atomic::inc(&mark_bitmap_count));
93 DEBUG_ONLY(Atomic::add(&mark_bitmap_size, size));
94 return true;
95 }
96 return false;
97 }
98
99 inline bool
100 ParMarkBitMap::is_live_words_in_range_in_cache(ParCompactionManager* cm, HeapWord* beg_addr) const {
101 return cm->last_query_begin() == beg_addr;
102 }
103
104 inline void
105 ParMarkBitMap::update_live_words_in_range_cache(ParCompactionManager* cm, HeapWord* beg_addr, oop end_obj, size_t result) const {
106 cm->set_last_query_begin(beg_addr);
107 cm->set_last_query_object(end_obj);
108 cm->set_last_query_return(result);
109 }
110
111 size_t
112 ParMarkBitMap::live_words_in_range_helper(HeapWord* beg_addr, oop end_obj) const
113 {
|