8328602: Parallel: Incorrect assertion in fill_dense_prefix_end
Reviewed-by: gli, iwalulya
This commit is contained in:
parent
528efe206d
commit
e06b568c3c
@ -1106,16 +1106,28 @@ void PSParallelCompact::summarize_spaces_quick()
|
||||
}
|
||||
|
||||
void PSParallelCompact::fill_dense_prefix_end(SpaceId id) {
|
||||
// Since both markword and klass takes 1 heap word, the min-obj-size is 2
|
||||
// heap words.
|
||||
// If min-fill-size decreases to 1, this whole method becomes redundant.
|
||||
assert(CollectedHeap::min_fill_size() == 2, "inv");
|
||||
// Comparing two sizes to decide if filling is required:
|
||||
//
|
||||
// The size of the filler (min-obj-size) is 2 heap words with the default
|
||||
// MinObjAlignment, since both markword and klass take 1 heap word.
|
||||
//
|
||||
// The size of the gap (if any) right before dense-prefix-end is
|
||||
// MinObjAlignment.
|
||||
//
|
||||
// Need to fill in the gap only if it's smaller than min-obj-size, and the
|
||||
// filler obj will extend to next region.
|
||||
|
||||
// Note: If min-fill-size decreases to 1, this whole method becomes redundant.
|
||||
assert(CollectedHeap::min_fill_size() >= 2, "inv");
|
||||
#ifndef _LP64
|
||||
// In 32-bit system, min-obj-alignment is >= 8 bytes, so the gap (if any)
|
||||
// right before denses-prefix must be greater than min-fill-size; nothing to
|
||||
// do.
|
||||
// In 32-bit system, each heap word is 4 bytes, so MinObjAlignment == 2.
|
||||
// The gap is always equal to min-fill-size, so nothing to do.
|
||||
return;
|
||||
#endif
|
||||
if (MinObjAlignment > 1) {
|
||||
return;
|
||||
}
|
||||
assert(CollectedHeap::min_fill_size() == 2, "inv");
|
||||
HeapWord* const dense_prefix_end = dense_prefix(id);
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user