RFR: 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)

Per Liden per.liden at oracle.com
Fri Jun 1 21:41:04 UTC 2018


Hi,

Please review the implementation of JEP 333: ZGC: A Scalable Low-Latency 
Garbage Collector (Experimental)

Please see the JEP for more information about the project. The JEP is 
currently in state "Proposed to Target" for JDK 11.

https://bugs.openjdk.java.net/browse/JDK-8197831

Additional information in can also be found on the ZGC project wiki.

https://wiki.openjdk.java.net/display/zgc/Main


Webrevs
-------

To make this easier to review, we've divided the change into two webrevs.

* ZGC Master: http://cr.openjdk.java.net/~pliden/8204210/webrev.0-master

   This patch contains the actual ZGC implementation, the new unit tests 
and other changes needed in HotSpot.

* ZGC Testing: http://cr.openjdk.java.net/~pliden/8204210/webrev.0-testing

   This patch contains changes to existing tests needed by ZGC.


Overview of Changes
-------------------

Below follows a list of the files we add/modify in the master patch, 
with a short summary describing each group.

* Build support - Making ZGC an optional feature.

   make/autoconf/hotspot.m4
   make/hotspot/lib/JvmFeatures.gmk
   src/hotspot/share/utilities/macros.hpp

* C2 AD file - Additions needed to generate ZGC load barriers (adlc does 
not currently offer a way to easily break this out).

   src/hotspot/cpu/x86/x86.ad
   src/hotspot/cpu/x86/x86_64.ad

* C2 - Things that can't be easily abstracted out into ZGC specific 
code, most of which is guarded behind a #if INCLUDE_ZGC and/or if 
(UseZGC) condition. There should only be two logic changes (one in 
idealKit.cpp and one in node.cpp) that are still active when ZGC is 
disabled. We believe these are low risk changes and should not introduce 
any real change i behavior when using other GCs.

   src/hotspot/share/adlc/formssel.cpp
   src/hotspot/share/opto/*
   src/hotspot/share/compiler/compilerDirectives.hpp

* General GC+Runtime - Registering ZGC as a collector.

   src/hotspot/share/gc/shared/*
   src/hotspot/share/runtime/vmStructs.cpp
   src/hotspot/share/runtime/vm_operations.hpp
   src/hotspot/share/prims/whitebox.cpp

* GC thread local data - Increasing the size of data area by 32 bytes.

   src/hotspot/share/gc/shared/gcThreadLocalData.hpp

* ZGC - The collector itself.

   src/hotspot/share/gc/z/*
   src/hotspot/cpu/x86/gc/z/*
   src/hotspot/os_cpu/linux_x86/gc/z/*
   test/hotspot/gtest/gc/z/*

* JFR - Adding new event types.

   src/hotspot/share/jfr/*
   src/jdk.jfr/share/conf/jfr/*

* Logging - Adding new log tags.

   src/hotspot/share/logging/*

* Metaspace - Adding a friend declaration.

   src/hotspot/share/memory/metaspace.hpp

* InstanceRefKlass - Adjustments for concurrent reference processing.

   src/hotspot/share/oops/instanceRefKlass.inline.hpp

* vmSymbol - Disabled clone intrinsic for ZGC.

   src/hotspot/share/classfile/vmSymbols.cpp

* Oop Verification - In four cases we disabled oop verification because 
it do not makes sense or is not applicable to a GC using load barriers.

   src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp
   src/hotspot/cpu/x86/stubGenerator_x86_64.cpp
   src/hotspot/share/compiler/oopMap.cpp
   src/hotspot/share/runtime/jniHandles.cpp

* StackValue - Apply a load barrier in case of OSR. This is a bit of a 
hack. However, this will go away in the future, when we have the next 
iteration of C2's load barriers in place (aka "C2 late barrier insertion").

   src/hotspot/share/runtime/stackValue.cpp

* JVMTI - Adding an assert() to catch problems if the tagmap hashing is 
changed in the future.

   src/hotspot/share/prims/jvmtiTagMap.cpp

* Legal - Adding copyright/license for 3rd party hash function used in 
ZHash.

   src/java.base/share/legal/c-libutl.md

* SA - Adding basic ZGC support.

   src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/*


Testing
-------

* Unit testing

   A number of new ZGC specific gtests have been added, in 
test/hotspot/gtest/gc/z/

* Regression testing

   No new failures in Mach5, with ZGC enabled, tier{1,2,3,4,5,6}
   No new failures in Mach5, with ZGC disabled, tier{1,2,3}

* Stress testing

   We have been continuously been running a number stress tests 
throughout the development, these include:

     specjbb2000
     specjbb2005
     specjbb2015
     specjvm98
     specjvm2008
     dacapo2009
     test/hotspot/jtreg/gc/stress/gcold
     test/hotspot/jtreg/gc/stress/systemgc
     test/hotspot/jtreg/gc/stress/gclocker
     test/hotspot/jtreg/gc/stress/gcbasher
     test/hotspot/jtreg/gc/stress/finalizer
     Kitchensink


Thanks!

/Per, Stefan & the ZGC team


More information about the hotspot-dev mailing list