JDK-8225048 : Shenandoah x86_32 support
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 8-shenandoah,11-shenandoah,13
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • CPU: x86
  • Submitted: 2019-05-30
  • Updated: 2020-01-23
  • Resolved: 2019-06-02
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 13 JDK 14
13 b24Fixed 14Fixed
Related Reports
Blocks :  
Blocks :  
Blocks :  
Sub Tasks
JDK-8225531 :  
Description
Some history: Shenandoah used to support x86_32 in "passive" mode long time ago. This mode relies only on stop-the-world GC to avoid implementing barriers (basically, runs Degenerated GC all the time). It was an interesting mode to see the footprint numbers you can get with uncommits and slimmer native pointers with really small microservice-size VMs. This mode was dropped before integration upstream, because many Shenandoah tests expect all heuristics/modes to work properly, and having the rudimentary x86_32 support was breaking tier1 tests. So we disabled it.

Today, we have significantly simplified runtime interface thanks to LRB and elimination of separate forwarding pointer slot, and we can build the fully concurrent x86_32 on top of that. This allows us to maintain 32-bit cleanness in Shenandoah code, plus serves are proof of concept that Shenandoah can be implemented on 32-bit platform.

A few compiler changes are needed to cover a corner cases that are needed for !LP64 paths, including the shenandoah_x86_32.ad file that carries Shenandoah CAS barriers. Otherwise most of the changes are in rewiring ShenandoahBarrierSetAssembler for x86 to properly share 32- and 64-bit paths. Plus there are test changes that make sure we don't run test we know would fail on 32-bit VMs.

The patch passes hotspot_gc_shenandoah tests, CTW tests, jcstress.
Comments
RFR: https://mail.openjdk.java.net/pipermail/shenandoah-dev/2019-May/009838.html
30-05-2019