At a glance
This post is a revisitation of my previous one on ZGC. Unlike ZGC, Shenandoah is also available for Windows and macOS!
OpenJDK Wiki states that Shenandoah does the bulk of GC work concurrently, including the concurrent compaction, which means its pause times are no longer directly proportional to the size of the heap. Garbage collecting a 200 GB heap or a 2 GB heap should have the similar low pause behavior.
Shenandoah is in upstream OpenJDK since JDK 12, under JEP 189. Backports to JDK 8u and JDK 11u are available as well.
My setup includes:
Please note that Shenandoah GC is available only on HotSpot JVM, OpenJ9 JVM come with different GCs.
Download and install OpenJDK and Eclipse IDE, you can simply unpack the archives in you home directory, take note of installation paths.
eclipse.ini configuration file in your Eclipse installation directory.
-vm option following these instructions, you may end up with something like:
Change the line containing
You may also change the heap size parameters
Xmx to higher values, personally I have quadrupled the values, more on this here.
The result should look like:
-vm /opt/java/jdk-12.0.1/bin/java -startup plugins/org.eclipse.equinox.launcher_1.5.300.v20190213-1655.jar --launcher.library plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.1000.v20190125-2016 -product org.eclipse.epp.package.jee.product -showsplash org.eclipse.epp.package.common --launcher.defaultAction openFile --launcher.defaultAction openFile --launcher.appendVmargs -vmargs -Dosgi.requiredJavaVersion=1.8 -Dosgi.firstname.lastname@example.org/eclipse-workspace -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication --add-modules=ALL-SYSTEM -Dosgi.requiredJavaVersion=1.8 -Dosgi.dataAreaRequiresExplicitInit=true -Xms1024m -Xmx4096m --add-modules=ALL-SYSTEM
Now you can run Eclipse IDE and enjoy it with your low-pause GC equipped JVM!