src/share/vm/gc_implementation/g1/g1CardCounts.cpp
Print this page
rev 4650 : 8014408: G1: crashes with assert assert(prev_committed_card_num == _committed_max_card_num) failed
Summary: Mismatch in the card number calculation between next and previous committed sizes of the card counts table.
Reviewed-by:
*** 99,122 ****
assert(_committed_size ==
ReservedSpace::allocation_align_size_up(_committed_size),
err_msg("Unaligned? committed_size: " SIZE_FORMAT, _committed_size));
! // Verify that the committed space for the card counts
! // matches our committed max card num.
size_t prev_committed_size = _committed_size;
! size_t prev_committed_card_num = prev_committed_size / sizeof(jbyte);
assert(prev_committed_card_num == _committed_max_card_num,
err_msg("Card mismatch: "
"prev: " SIZE_FORMAT ", "
! "committed: "SIZE_FORMAT,
! prev_committed_card_num, _committed_max_card_num));
size_t new_size = (heap_capacity >> CardTableModRefBS::card_shift) * sizeof(jbyte);
size_t new_committed_size = ReservedSpace::allocation_align_size_up(new_size);
! size_t new_committed_card_num =
! MIN2(_reserved_max_card_num, new_committed_size / sizeof(jbyte));
if (_committed_max_card_num < new_committed_card_num) {
// we need to expand the backing store for the card counts
size_t expand_size = new_committed_size - prev_committed_size;
--- 99,125 ----
assert(_committed_size ==
ReservedSpace::allocation_align_size_up(_committed_size),
err_msg("Unaligned? committed_size: " SIZE_FORMAT, _committed_size));
! // Verify that the committed space for the card counts matches our
! // committed max card num. Note for some allocation alignments, the
! // amount of space actually committed for the counts table will be able
! // to span more cards than the number spanned by the maximum heap.
size_t prev_committed_size = _committed_size;
! size_t prev_committed_card_num = committed_to_card_num(prev_committed_size);
!
assert(prev_committed_card_num == _committed_max_card_num,
err_msg("Card mismatch: "
"prev: " SIZE_FORMAT ", "
! "committed: "SIZE_FORMAT", "
! "reserved: "SIZE_FORMAT,
! prev_committed_card_num, _committed_max_card_num, _reserved_max_card_num));
size_t new_size = (heap_capacity >> CardTableModRefBS::card_shift) * sizeof(jbyte);
size_t new_committed_size = ReservedSpace::allocation_align_size_up(new_size);
! size_t new_committed_card_num = committed_to_card_num(new_committed_size);
if (_committed_max_card_num < new_committed_card_num) {
// we need to expand the backing store for the card counts
size_t expand_size = new_committed_size - prev_committed_size;