-
Enhancement
-
Resolution: Fixed
-
P4
-
19
-
b06
In `object_starts_in_range`:
```
jbyte* start_block = block_for_addr(start_addr);
jbyte* end_block = block_for_addr(end_addr);
for (jbyte* block = start_block; block <= end_block; block++)
```
Note the for-loop is inclusive; IOW, this method returns true iff an obj starts in `[start_addr, end_addr]`.
However, both of its two callers `PSCardTable::scavenge_contents_parallel` and `PSOldGen::object_iterate_block` actually interest in whether an obj starts in `[start_addr, end_addr)`.
```
jbyte* start_block = block_for_addr(start_addr);
jbyte* end_block = block_for_addr(end_addr);
for (jbyte* block = start_block; block <= end_block; block++)
```
Note the for-loop is inclusive; IOW, this method returns true iff an obj starts in `[start_addr, end_addr]`.
However, both of its two callers `PSCardTable::scavenge_contents_parallel` and `PSOldGen::object_iterate_block` actually interest in whether an obj starts in `[start_addr, end_addr)`.
- relates to
-
JDK-8280027 tests fail "assert(_covered_region.contains(p)) failed: out of bounds access to object start array"
- Closed
-
JDK-8280030 [REDO] Parallel: More precise boundary in ObjectStartArray::object_starts_in_range
- Resolved
-
JDK-8280028 [BACKOUT] Parallel: More precise boundary in ObjectStartArray::object_starts_in_range
- Resolved