The threshold is initialized to be the start of *second* card. The rational here is that objects are allocated from the region-start (except for humongous-continue regions), so the entry for the first card will always be zero.
```
void G1BlockOffsetTablePart::initialize_threshold() {
_next_offset_threshold = _hr->bottom() + BOTConstants::card_size_in_words();
}
```
Instead, one can use `bottom()` as the initial value; then entries for offset cards (cards holding the offset value, in constrast to cards holding backskip values) will be strictly less than card size.
```
void G1BlockOffsetTablePart::initialize_threshold() {
_next_offset_threshold = _hr->bottom() + BOTConstants::card_size_in_words();
}
```
Instead, one can use `bottom()` as the initial value; then entries for offset cards (cards holding the offset value, in constrast to cards holding backskip values) will be strictly less than card size.