-
Type:
Bug
-
Resolution: Fixed
-
Priority:
P4
-
Affects Version/s: 21, 25, 26
-
Component/s: hotspot
-
b26
While rewriting some of the heap size initialization code we hit a corner-case where the setting of ShenandoahMaxRegionSize to something that isn't a power-of-2 will hit an assert in `max_heap_for_compressed_oops`.
When running with:
java -XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahMaxRegionSize=33m -version
The following code:
```
size_t displacement_due_to_null_page = align_up(os::vm_page_size(),
_conservative_max_heap_alignment)
```
triggers:
```
# assert(is_power_of_2(alignment)) failed: must be a power of 2: 34603008
```
because `_conservative_max_heap_alignment` is not a power-of-2.
This happens because Shenandoah's `conservative_max_heap_alignment()`
returns a potentially unaligned `ShenandoahMaxRegionSize` value.
```
size_t ShenandoahArguments::conservative_max_heap_alignment() {
size_t align = ShenandoahMaxRegionSize;
if (UseLargePages) {
align = MAX2(align, os::large_page_size());
}
return align;
}
```
I propose a small fix to adjust `align` to be a power-of-2.
When running with:
java -XX:+UseShenandoahGC -XX:+UnlockExperimentalVMOptions -XX:ShenandoahMaxRegionSize=33m -version
The following code:
```
size_t displacement_due_to_null_page = align_up(os::vm_page_size(),
_conservative_max_heap_alignment)
```
triggers:
```
# assert(is_power_of_2(alignment)) failed: must be a power of 2: 34603008
```
because `_conservative_max_heap_alignment` is not a power-of-2.
This happens because Shenandoah's `conservative_max_heap_alignment()`
returns a potentially unaligned `ShenandoahMaxRegionSize` value.
```
size_t ShenandoahArguments::conservative_max_heap_alignment() {
size_t align = ShenandoahMaxRegionSize;
if (UseLargePages) {
align = MAX2(align, os::large_page_size());
}
return align;
}
```
I propose a small fix to adjust `align` to be a power-of-2.
- links to
-
Commit(master)
openjdk/jdk/5291e1c1
-
Review(master)
openjdk/jdk/28492