8332871: Parallel: Remove public bits APIs in ParMarkBitMap

Reviewed-by: tschatzl
This commit is contained in:
Albert Mingkun Yang 2024-05-27 08:06:24 +00:00
parent 61db2f5b90
commit a3a367ef5d
3 changed files with 14 additions and 24 deletions

@ -31,8 +31,7 @@
class PSVirtualSpace;
class ParMarkBitMap: public CHeapObj<mtGC>
{
class ParMarkBitMap: public CHeapObj<mtGC> {
public:
typedef BitMap::idx_t idx_t;
@ -46,9 +45,6 @@ public:
inline bool mark_obj(HeapWord* addr);
inline bool mark_obj(oop obj);
// Traditional interface for testing whether an object is marked or not (these
// test only the begin bits).
inline bool is_marked(idx_t bit) const;
inline bool is_marked(HeapWord* addr) const;
inline bool is_marked(oop obj) const;
@ -57,18 +53,13 @@ public:
size_t reserved_byte_size() const { return _reserved_byte_size; }
// Convert a heap address to/from a bit index.
inline idx_t addr_to_bit(HeapWord* addr) const;
inline HeapWord* bit_to_addr(idx_t bit) const;
inline HeapWord* find_obj_beg(HeapWord* beg, HeapWord* end) const;
// Return the address of the last obj-start in the range [beg, end). If no
// object is found, return end.
inline HeapWord* find_obj_beg_reverse(HeapWord* beg, HeapWord* end) const;
// Clear a range of bits or the entire bitmap (both begin and end bits are
// cleared).
inline void clear_range(idx_t beg, idx_t end);
// Clear a range of bits corresponding to heap address range [beg, end).
inline void clear_range(HeapWord* beg, HeapWord* end);
void print_on_error(outputStream* st) const {
st->print_cr("Marking Bits: (ParMarkBitMap*) " PTR_FORMAT, p2i(this));
@ -111,6 +102,10 @@ private:
inline size_t region_size() const;
inline size_t size() const;
// Convert a heap address to/from a bit index.
inline idx_t addr_to_bit(HeapWord* addr) const;
inline HeapWord* bit_to_addr(idx_t bit) const;
#ifdef ASSERT
inline void verify_bit(idx_t bit) const;
inline void verify_addr(HeapWord* addr) const;

@ -34,8 +34,10 @@ inline ParMarkBitMap::ParMarkBitMap():
_region_start(nullptr), _region_size(0), _beg_bits(), _virtual_space(nullptr), _reserved_byte_size(0)
{ }
inline void ParMarkBitMap::clear_range(idx_t beg, idx_t end) {
_beg_bits.clear_range(beg, end);
inline void ParMarkBitMap::clear_range(HeapWord* beg, HeapWord* end) {
const idx_t beg_bit = addr_to_bit(beg);
const idx_t end_bit = addr_to_bit(end);
_beg_bits.clear_range(beg_bit, end_bit);
}
inline ParMarkBitMap::idx_t ParMarkBitMap::bits_required(size_t words) {
@ -62,12 +64,8 @@ inline size_t ParMarkBitMap::size() const {
return _beg_bits.size();
}
inline bool ParMarkBitMap::is_marked(idx_t bit) const {
return _beg_bits.at(bit);
}
inline bool ParMarkBitMap::is_marked(HeapWord* addr) const {
return is_marked(addr_to_bit(addr));
return _beg_bits.at(addr_to_bit(addr));
}
inline bool ParMarkBitMap::is_marked(oop obj) const {

@ -826,9 +826,7 @@ PSParallelCompact::clear_data_covering_space(SpaceId id)
HeapWord* const top = space->top();
HeapWord* const max_top = MAX2(top, _space_info[id].new_top());
const idx_t beg_bit = _mark_bitmap.addr_to_bit(bot);
const idx_t end_bit = _mark_bitmap.addr_to_bit(top);
_mark_bitmap.clear_range(beg_bit, end_bit);
_mark_bitmap.clear_range(bot, top);
const size_t beg_region = _summary_data.addr_to_region_idx(bot);
const size_t end_region =
@ -1001,10 +999,9 @@ void PSParallelCompact::fill_dense_prefix_end(SpaceId id) {
return;
}
RegionData* const region_after_dense_prefix = _summary_data.addr_to_region_ptr(dense_prefix_end);
idx_t const dense_prefix_bit = _mark_bitmap.addr_to_bit(dense_prefix_end);
if (region_after_dense_prefix->partial_obj_size() != 0 ||
_mark_bitmap.is_marked(dense_prefix_bit)) {
_mark_bitmap.is_marked(dense_prefix_end)) {
// The region after the dense prefix starts with live bytes.
return;
}