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