review request (M) - 6725714 add a table to speed up bitmap searches

John Coomes John.Coomes at oracle.com
Wed May 29 09:40:02 UTC 2013


Jon Masamitsu (jon.masamitsu at oracle.com) wrote:
> 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?

Yes.

> 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?

Right; fill_blocks() only fills the blocks for a single region.

FWIW, there's no need to carry over a total to the next region.  The
block->offset value is the number of live words *in the region* that
are to the left of the first obj that starts in the block.

> 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?

No, it's not.  It was useful for verification during initial
development, when region sizes were smaller.  I'll remove it.

Thanks for looking at it.

-John

> 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