comparison src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp @ 10285:4868caa99ecf

8014339: Improve assert and remove some dead code from parMarkBitMap.hpp/cpp Reviewed-by: stefank, tschatzl
author brutisso
date Mon, 13 May 2013 14:09:05 +0200
parents b9a9ed0f8eeb
children 10f759898d40
comparison
equal deleted inserted replaced
10284:7a95933197d0 10285:4868caa99ecf
22 * 22 *
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "gc_implementation/parallelScavenge/parMarkBitMap.hpp" 26 #include "gc_implementation/parallelScavenge/parMarkBitMap.hpp"
27 #include "gc_implementation/parallelScavenge/parMarkBitMap.inline.hpp"
28 #include "gc_implementation/parallelScavenge/psParallelCompact.hpp" 27 #include "gc_implementation/parallelScavenge/psParallelCompact.hpp"
29 #include "oops/oop.inline.hpp" 28 #include "oops/oop.inline.hpp"
30 #include "runtime/os.hpp" 29 #include "runtime/os.hpp"
31 #include "utilities/bitMap.inline.hpp" 30 #include "utilities/bitMap.inline.hpp"
32 #include "services/memTracker.hpp" 31 #include "services/memTracker.hpp"
106 return true; 105 return true;
107 } 106 }
108 return false; 107 return false;
109 } 108 }
110 109
111 size_t
112 ParMarkBitMap::live_words_in_range(HeapWord* beg_addr, HeapWord* end_addr) const
113 {
114 assert(beg_addr <= end_addr, "bad range");
115
116 idx_t live_bits = 0;
117
118 // The bitmap routines require the right boundary to be word-aligned.
119 const idx_t end_bit = addr_to_bit(end_addr);
120 const idx_t range_end = BitMap::word_align_up(end_bit);
121
122 idx_t beg_bit = find_obj_beg(addr_to_bit(beg_addr), range_end);
123 while (beg_bit < end_bit) {
124 idx_t tmp_end = find_obj_end(beg_bit, range_end);
125 if (tmp_end < end_bit) {
126 live_bits += tmp_end - beg_bit + 1;
127 beg_bit = find_obj_beg(tmp_end + 1, range_end);
128 } else {
129 live_bits += end_bit - beg_bit; // No + 1 here; end_bit is not counted.
130 return bits_to_words(live_bits);
131 }
132 }
133 return bits_to_words(live_bits);
134 }
135
136 size_t ParMarkBitMap::live_words_in_range(HeapWord* beg_addr, oop end_obj) const 110 size_t ParMarkBitMap::live_words_in_range(HeapWord* beg_addr, oop end_obj) const
137 { 111 {
138 assert(beg_addr <= (HeapWord*)end_obj, "bad range"); 112 assert(beg_addr <= (HeapWord*)end_obj, "bad range");
139 assert(is_marked(end_obj), "end_obj must be live"); 113 assert(is_marked(end_obj), "end_obj must be live");
140 114
242 216
243 live_closure->set_source(bit_to_addr(range_end)); 217 live_closure->set_source(bit_to_addr(range_end));
244 return complete; 218 return complete;
245 } 219 }
246 220
247 #ifndef PRODUCT
248 void ParMarkBitMap::reset_counters()
249 {
250 _cas_tries = _cas_retries = _cas_by_another = 0;
251 }
252 #endif // #ifndef PRODUCT
253
254 #ifdef ASSERT 221 #ifdef ASSERT
255 void ParMarkBitMap::verify_clear() const 222 void ParMarkBitMap::verify_clear() const
256 { 223 {
257 const idx_t* const beg = (const idx_t*)_virtual_space->committed_low_addr(); 224 const idx_t* const beg = (const idx_t*)_virtual_space->committed_low_addr();
258 const idx_t* const end = (const idx_t*)_virtual_space->committed_high_addr(); 225 const idx_t* const end = (const idx_t*)_virtual_space->committed_high_addr();