--- old/src/hotspot/share/code/codeCache.hpp 2018-11-28 20:30:33.268125608 +0100 +++ new/src/hotspot/share/code/codeCache.hpp 2018-11-28 20:30:33.110126785 +0100 @@ -75,6 +75,7 @@ class ExceptionCache; class KlassDepChange; class OopClosure; +class ShenandoahParallelCodeHeapIterator; class CodeCache : AllStatic { friend class VMStructs; @@ -82,6 +83,7 @@ template friend class CodeBlobIterator; friend class WhiteBox; friend class CodeCacheLoader; + friend class ShenandoahParallelCodeHeapIterator; private: // CodeHeaps of the cache static GrowableArray* _heaps; --- old/src/hotspot/share/jfr/leakprofiler/leakProfiler.cpp 2018-11-28 20:30:33.505123843 +0100 +++ new/src/hotspot/share/jfr/leakprofiler/leakProfiler.cpp 2018-11-28 20:30:33.339125080 +0100 @@ -47,6 +47,11 @@ return false; } + if (UseShenandoahGC) { + log_warning(jfr)("LeakProfiler is currently not supported in combination with Shenandoah GC"); + return false; + } + if (_object_sampler != NULL) { // already started return true; --- old/src/hotspot/share/memory/metaspace.hpp 2018-11-28 20:30:33.730122167 +0100 +++ new/src/hotspot/share/memory/metaspace.hpp 2018-11-28 20:30:33.572123344 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -231,6 +231,7 @@ class ClassLoaderMetaspace : public CHeapObj { friend class CollectedHeap; // For expand_and_allocate() friend class ZCollectedHeap; // For expand_and_allocate() + friend class ShenandoahHeap; // For expand_and_allocate() friend class Metaspace; friend class MetaspaceUtils; friend class metaspace::PrintCLDMetaspaceInfoClosure; --- old/src/hotspot/share/runtime/fieldDescriptor.hpp 2018-11-28 20:30:33.954120499 +0100 +++ new/src/hotspot/share/runtime/fieldDescriptor.hpp 2018-11-28 20:30:33.800121646 +0100 @@ -91,6 +91,7 @@ bool is_static() const { return access_flags().is_static(); } bool is_final() const { return access_flags().is_final(); } + bool is_stable() const { return access_flags().is_stable(); } bool is_volatile() const { return access_flags().is_volatile(); } bool is_transient() const { return access_flags().is_transient(); } --- old/src/hotspot/share/runtime/mutexLocker.cpp 2018-11-28 20:30:34.181118809 +0100 +++ new/src/hotspot/share/runtime/mutexLocker.cpp 2018-11-28 20:30:34.021120000 +0100 @@ -234,6 +234,14 @@ def(MonitoringSupport_lock , PaddedMutex , native , true, Monitor::_safepoint_check_never); // used for serviceability monitoring support } + if (UseShenandoahGC) { + def(SATB_Q_FL_lock , PaddedMutex , access, true, Monitor::_safepoint_check_never); + def(SATB_Q_CBL_mon , PaddedMonitor, access, true, Monitor::_safepoint_check_never); + def(Shared_SATB_Q_lock , PaddedMutex , access + 1, true, Monitor::_safepoint_check_never); + + def(StringDedupQueue_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never); + def(StringDedupTable_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); + } def(ParGCRareEvent_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_sometimes); def(DerivedPointerTableGC_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); def(CGCPhaseManager_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_sometimes); --- old/src/hotspot/share/runtime/vm_operations.hpp 2018-11-28 20:30:34.408117118 +0100 +++ new/src/hotspot/share/runtime/vm_operations.hpp 2018-11-28 20:30:34.250118295 +0100 @@ -98,6 +98,15 @@ template(HeapIterateOperation) \ template(ReportJavaOutOfMemory) \ template(JFRCheckpoint) \ + template(ShenandoahFullGC) \ + template(ShenandoahInitMark) \ + template(ShenandoahFinalMarkStartEvac) \ + template(ShenandoahFinalEvac) \ + template(ShenandoahInitTraversalGC) \ + template(ShenandoahFinalTraversalGC) \ + template(ShenandoahInitUpdateRefs) \ + template(ShenandoahFinalUpdateRefs) \ + template(ShenandoahDegeneratedGC) \ template(Exit) \ template(LinuxDllLoad) \ template(RotateGCLog) \ --- old/src/hotspot/share/utilities/globalDefinitions.hpp 2018-11-28 20:30:34.632115450 +0100 +++ new/src/hotspot/share/utilities/globalDefinitions.hpp 2018-11-28 20:30:34.479116589 +0100 @@ -67,6 +67,7 @@ #define INT64_FORMAT "%" PRId64 #define UINT64_FORMAT "%" PRIu64 #define UINT64_FORMAT_X "%" PRIx64 +#define UINT64_FORMAT_HEX_W(width) "%" #width PRIx64 #define INT64_FORMAT_W(width) "%" #width PRId64 #define UINT64_FORMAT_W(width) "%" #width PRIu64 --- old/src/hotspot/share/utilities/macros.hpp 2018-11-28 20:30:34.861113744 +0100 +++ new/src/hotspot/share/utilities/macros.hpp 2018-11-28 20:30:34.711114861 +0100 @@ -185,6 +185,24 @@ #define NOT_G1GC_RETURN_(code) { return code; } #endif // INCLUDE_G1GC +#ifndef INCLUDE_SHENANDOAHGC +#define INCLUDE_SHENANDOAHGC 1 +#endif // INCLUDE_SHENANDOAHGC + +#if INCLUDE_SHENANDOAHGC +#define SHENANDOAHGC_ONLY(x) x +#define SHENANDOAHGC_ONLY_ARG(arg) arg, +#define NOT_SHENANDOAHGC(x) +#define NOT_SHENANDOAHGC_RETURN /* next token must be ; */ +#define NOT_SHENANDOAHGC_RETURN_(code) /* next token must be ; */ +#else +#define SHENANDOAHGC_ONLY(x) +#define SHENANDOAHGC_ONLY_ARG(arg) +#define NOT_SHENANDOAHGC(x) x +#define NOT_SHENANDOAHGC_RETURN {} +#define NOT_SHENANDOAHGC_RETURN_(code) { return code; } +#endif // INCLUDE_SHENANDOAHGC + #ifndef INCLUDE_PARALLELGC #define INCLUDE_PARALLELGC 1 #endif // INCLUDE_PARALLELGC