From Fedora Project Wiki

Shenandoah 1.0

Summary

This change aims at adding a very low pause time Garbage Collection(GC) algorithm named Shenandoah to OpenJDK.

Owner

Change Proposal Name = Changes/Shenandoah

Current status

  • Targeted release: Fedora 24
  • Last updated: 2016-02-15
  • Tracker bug: <will be assigned by the Wrangler>

Detailed Description

We have implemented a new GC algorithm called Shenandoah in OpenJDK. This GC does more of the GC work while the Java threads are running so we can do less work during the stop the world pause and therefore minimize the amount of time the Java threads are stopped. This is targeted at high availability Java applications with large heaps which are concerned with responsiveness.

Benefit to Fedora

Fedora will be the first OpenJDK distribution with a low pause time GC appropriate for modern heaps of 20+GB.

Scope

  • Proposal owners:

The work is an official OpenJDK project but the OpenJDK committee have not committed to including it upstream. Including Shenandoah in Fedora will give us a chance to get early user feedback.

This is an isolated change activated by a -XX:+UseShenandoahGC flag. Users who don't choose to activate the change will see no differences. Users who do activate the flag should see lower pause times on large heaps.


We have made some small changes to the Java compiler and Java runtime system to add read barriers and more extensive write barriers. The bulk of our changes have been in an isolated directory. All of the changes are only activated if the -XX:+UseShenandoahGC flag is set.

  • Other developers: N/A
  • Release engineering: N/A
  • Policies and guidelines: N/A

Upgrade/compatibility impact

N/A (not a System Wide Change)

How To Test

Running the current TCK tests will ensure that we didn't break any core Java functionality.

Application testing will ensure that we actually improve performance. We currently run SpecJVM2008, SpecJBB2015, and Radargun. We hope that others will run their large applications with -XX:+UseShenandoahGC and tell us how their performance compares with -XX:+UseG1GC both in terms of pause times and overall throughput.

Shenandoah is really only useful for large heaps which can't be garbage collected in reasonable pause times, therefore we recommend that you use a different collector if your heap is less than 20gb.

Download and install from openjdk.java.net/shenandoah/jdk8 or openjdk.java.net/shenandoah/jdk9


N/A (not a System Wide Change)

User Experience

N/A (not a System Wide Change)

Dependencies

N/A (not a System Wide Change)

Contingency Plan

  • Contingency mechanism: (What to do? Who will do it?) N/A (not a System Wide Change)
  • Contingency deadline: N/A (not a System Wide Change)
  • Blocks release? N/A (not a System Wide Change), Yes/No
  • Blocks product? N/A

Documentation

N/A (not a System Wide Change)

Release Notes