review request (M) - 6725714 add a table to speed up bitmap searches
Jon Masamitsu
jon.masamitsu at oracle.com
Fri May 24 22:58:28 UTC 2013
John,
http://cr.openjdk.java.net/~jcoomes/6725714-blocktable/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp.frames.html
It seems like you could update the offset for the last block in the
region but skip added up the live data in the last block. Does
this code do that?
Adding up the live data for the last block would be useful only
for updating the first block of the next region (which you're not
doing), right?
3262 size_t beg_bit = bitmap->words_to_bits(region_idx << Log2RegionSize);
3263 const size_t range_end = beg_bit + bitmap->words_to_bits(RegionSize);
3264 size_t live_bits = bitmap->words_to_bits(partial_obj_size);
3265 beg_bit = bitmap->find_obj_beg(beg_bit + live_bits, range_end);
3266 while (beg_bit < range_end) {
3267 const size_t new_block = beg_bit >> Log2BitsPerBlock;
3268 if (new_block != cur_block) {
3269 cur_block = new_block;
3270 sd.block(cur_block)->set_offset(bitmap->bits_to_words(live_bits));
3271 }
3272
3273 const size_t end_bit = bitmap->find_obj_end(beg_bit, range_end);
3274 if (end_bit < range_end - 1) {
3275 live_bits += end_bit - beg_bit + 1;
3276 beg_bit = bitmap->find_obj_beg(end_bit + 1, range_end);
3277 } else {
3278 return;
3279 }
3280 }
Is region_calc_new_pointer() used?
Jon
On 5/23/2013 8:03 AM, John Coomes wrote:
> Please review the following change which adds a new table (the
> 'BlockTable') to the parallel compacting collector:
>
> http://cr.openjdk.java.net/~jcoomes/6725714-blocktable/
>
> I've run a number of test suites (vm.regression, vm.gc, vm.runtime,
> nsk.stress, nsk.monitoring, vm.compiler) in 32- and 64-bit on solaris
> and/or linux.
>
> -John
More information about the hotspot-gc-dev
mailing list