RFR: 8213415: BitMap::word_index_round_up overflow problems

Stefan Karlsson stefan.karlsson at oracle.com
Mon Dec 2 10:10:59 UTC 2019


On 2019-11-29 21:37, Kim Barrett wrote:
>> On Nov 29, 2019, at 3:03 AM, Thomas Stüfe <thomas.stuefe at gmail.com> wrote:
>>
>> Side note, I was interested in using smaller types because long term I would like to have a BitMap class in cases where I today use little hand written bitmaps. As it is now, BitMap has a pointer and a size, which makes it a 16byte structure on 64 bit, which is rather fat. The indirection is also often unwanted. I would like to have a BitMap class which contains directly the data as member(s), e.g. one where it just has a 16bit word or, maybe, an array of multiple words. That would make this structure a lot smaller and better suited to be included in space sensitive structures.
> There was some discussion here in Oracle about this sort of thing a
> while ago. Looking back over that discussion, I don't think we got
> very far with a statically sized bitmap, just some handwaving. I think
> the interest is there, but ideas (and time to persue them!) are
> needed.

FWIW, see the usage of BitMapView in zLiveMap.hpp and zLiveMap.inline.hpp.

The bitmap backing is a single word inside ZLiveMap:
   BitMap::bm_word_t _segment_live_bits;

and the size is constant:
   static const size_t nsegments = 64;

The views are created with:
inline BitMapView ZLiveMap::segment_live_bits() {
   return BitMapView(&_segment_live_bits, nsegments);
}

and then used with:
inline bool ZLiveMap::is_segment_live(BitMap::idx_t segment) const {
   return segment_live_bits().par_at(segment);
}

All this gets inlined as expected.

It doesn't support sizes less than a word, but it does support arrays of 
multiple words.

StefanK


More information about the hotspot-dev mailing list