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