You can try an in-development version of the GC with the 'shipilev/openjdk-shenandoah' Docker image (https://hub.docker.com/r/shipilev/openjdk-shenandoah/).
Run the contained Java executable with -XX:+UseShenandoahGC
- Shenandoah uses Brooks-style forward pointers whereas ZGC uses colored pointers and off-heap forwarding tables. Meaning Shenandoah has a bigger impact on heap footprint but less offheap data meaning the heap size is closer to the RSS.
- Shenandoah runs on Windows and macOS if you build from source, AFAIK this is a non-goal for ZGC.
- Shenandoah tries to return unused heap to the OS wheres currently the recommendation for ZGC seems to be -Xms == -Xmx. In addition ZGC tripple maps the heap which can lead to interesting challenges in resource usage accounting.
- None of them are generational although Shenandoah allows for custom policies and has short cuts if you application is young-only.
Edit, here it is: http://hg.openjdk.java.net/code-tools/jmh/file/3769055ad883/...