--- old/src/hotspot/share/gc/shared/barrierSetConfig.hpp 2018-11-30 21:07:46.918573732 +0100 +++ new/src/hotspot/share/gc/shared/barrierSetConfig.hpp 2018-11-30 21:07:46.759575202 +0100 @@ -32,6 +32,7 @@ f(CardTableBarrierSet) \ EPSILONGC_ONLY(f(EpsilonBarrierSet)) \ G1GC_ONLY(f(G1BarrierSet)) \ + SHENANDOAHGC_ONLY(f(ShenandoahBarrierSet)) \ ZGC_ONLY(f(ZBarrierSet)) #define FOR_EACH_ABSTRACT_BARRIER_SET_DO(f) \ --- old/src/hotspot/share/gc/shared/barrierSetConfig.inline.hpp 2018-11-30 21:07:47.131571763 +0100 +++ new/src/hotspot/share/gc/shared/barrierSetConfig.inline.hpp 2018-11-30 21:07:46.981573149 +0100 @@ -36,6 +36,9 @@ #if INCLUDE_G1GC #include "gc/g1/g1BarrierSet.inline.hpp" #endif +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/shenandoahBarrierSet.inline.hpp" +#endif #if INCLUDE_ZGC #include "gc/z/zBarrierSet.inline.hpp" #endif --- old/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp 2018-11-30 21:07:47.350569737 +0100 +++ new/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp 2018-11-30 21:07:47.196571161 +0100 @@ -314,6 +314,8 @@ virtual void ccp_analyze(PhaseCCP* ccp, Unique_Node_List& worklist, Node* use) const {} virtual Node* split_if_pre(PhaseIdealLoop* phase, Node* n) const { return NULL; } + virtual bool build_loop_late_post(PhaseIdealLoop* phase, Node* n) const { return false; } + virtual bool sink_node(PhaseIdealLoop* phase, Node* n, Node* x, Node* x_ctrl, Node* n_ctrl) const { return false; } }; #endif // SHARE_GC_SHARED_C2_BARRIERSETC2_HPP --- old/src/hotspot/share/gc/shared/collectedHeap.hpp 2018-11-30 21:07:47.579567620 +0100 +++ new/src/hotspot/share/gc/shared/collectedHeap.hpp 2018-11-30 21:07:47.417569118 +0100 @@ -90,6 +90,7 @@ // CMSHeap // G1CollectedHeap // ParallelScavengeHeap +// ShenandoahHeap // ZCollectedHeap // class CollectedHeap : public CHeapObj { @@ -176,7 +177,8 @@ CMS, G1, Epsilon, - Z + Z, + Shenandoah }; static inline size_t filler_array_max_size() { --- old/src/hotspot/share/gc/shared/gcCause.cpp 2018-11-30 21:07:47.808565503 +0100 +++ new/src/hotspot/share/gc/shared/gcCause.cpp 2018-11-30 21:07:47.651566955 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 @@ -105,6 +105,21 @@ case _dcmd_gc_run: return "Diagnostic Command"; + case _shenandoah_allocation_failure_evac: + return "Allocation Failure During Evac"; + + case _shenandoah_stop_vm: + return "Stopping VM"; + + case _shenandoah_concurrent_gc: + return "Shenandoah Concurrent GC"; + + case _shenandoah_traversal_gc: + return "Shenandoah Traversal GC"; + + case _shenandoah_upgrade_to_full_gc: + return "Shenandoah Upgrade To Full GC"; + case _z_timer: return "Timer"; --- old/src/hotspot/share/gc/shared/gcCause.hpp 2018-11-30 21:07:48.036563395 +0100 +++ new/src/hotspot/share/gc/shared/gcCause.hpp 2018-11-30 21:07:47.874564893 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 @@ -78,6 +78,12 @@ _dcmd_gc_run, + _shenandoah_stop_vm, + _shenandoah_allocation_failure_evac, + _shenandoah_concurrent_gc, + _shenandoah_traversal_gc, + _shenandoah_upgrade_to_full_gc, + _z_timer, _z_warmup, _z_allocation_rate, @@ -121,7 +127,8 @@ // _allocation_failure is the generic cause a collection for allocation failure // _adaptive_size_policy is for a collecton done before a full GC return (cause == GCCause::_allocation_failure || - cause == GCCause::_adaptive_size_policy); + cause == GCCause::_adaptive_size_policy || + cause == GCCause::_shenandoah_allocation_failure_evac); } // Return a string describing the GCCause. --- old/src/hotspot/share/gc/shared/gcConfig.cpp 2018-11-30 21:07:48.287561074 +0100 +++ new/src/hotspot/share/gc/shared/gcConfig.cpp 2018-11-30 21:07:48.110562711 +0100 @@ -43,6 +43,9 @@ #if INCLUDE_SERIALGC #include "gc/serial/serialArguments.hpp" #endif +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/shenandoahArguments.hpp" +#endif #if INCLUDE_ZGC #include "gc/z/zArguments.hpp" #endif @@ -57,23 +60,25 @@ _flag(flag), _name(name), _arguments(arguments), _hs_err_name(hs_err_name) {} }; - CMSGC_ONLY(static CMSArguments cmsArguments;) - EPSILONGC_ONLY(static EpsilonArguments epsilonArguments;) - G1GC_ONLY(static G1Arguments g1Arguments;) -PARALLELGC_ONLY(static ParallelArguments parallelArguments;) - SERIALGC_ONLY(static SerialArguments serialArguments;) - ZGC_ONLY(static ZArguments zArguments;) + CMSGC_ONLY(static CMSArguments cmsArguments;) + EPSILONGC_ONLY(static EpsilonArguments epsilonArguments;) + G1GC_ONLY(static G1Arguments g1Arguments;) + PARALLELGC_ONLY(static ParallelArguments parallelArguments;) + SERIALGC_ONLY(static SerialArguments serialArguments;) +SHENANDOAHGC_ONLY(static ShenandoahArguments shenandoahArguments;) + ZGC_ONLY(static ZArguments zArguments;) // Table of supported GCs, for translating between command // line flag, CollectedHeap::Name and GCArguments instance. static const SupportedGC SupportedGCs[] = { - CMSGC_ONLY_ARG(SupportedGC(UseConcMarkSweepGC, CollectedHeap::CMS, cmsArguments, "concurrent mark sweep gc")) - EPSILONGC_ONLY_ARG(SupportedGC(UseEpsilonGC, CollectedHeap::Epsilon, epsilonArguments, "epsilon gc")) - G1GC_ONLY_ARG(SupportedGC(UseG1GC, CollectedHeap::G1, g1Arguments, "g1 gc")) - PARALLELGC_ONLY_ARG(SupportedGC(UseParallelGC, CollectedHeap::Parallel, parallelArguments, "parallel gc")) - PARALLELGC_ONLY_ARG(SupportedGC(UseParallelOldGC, CollectedHeap::Parallel, parallelArguments, "parallel gc")) - SERIALGC_ONLY_ARG(SupportedGC(UseSerialGC, CollectedHeap::Serial, serialArguments, "serial gc")) - ZGC_ONLY_ARG(SupportedGC(UseZGC, CollectedHeap::Z, zArguments, "z gc")) + CMSGC_ONLY_ARG(SupportedGC(UseConcMarkSweepGC, CollectedHeap::CMS, cmsArguments, "concurrent mark sweep gc")) + EPSILONGC_ONLY_ARG(SupportedGC(UseEpsilonGC, CollectedHeap::Epsilon, epsilonArguments, "epsilon gc")) + G1GC_ONLY_ARG(SupportedGC(UseG1GC, CollectedHeap::G1, g1Arguments, "g1 gc")) + PARALLELGC_ONLY_ARG(SupportedGC(UseParallelGC, CollectedHeap::Parallel, parallelArguments, "parallel gc")) + PARALLELGC_ONLY_ARG(SupportedGC(UseParallelOldGC, CollectedHeap::Parallel, parallelArguments, "parallel gc")) + SERIALGC_ONLY_ARG(SupportedGC(UseSerialGC, CollectedHeap::Serial, serialArguments, "serial gc")) +SHENANDOAHGC_ONLY_ARG(SupportedGC(UseShenandoahGC, CollectedHeap::Shenandoah, shenandoahArguments, "shenandoah gc")) + ZGC_ONLY_ARG(SupportedGC(UseZGC, CollectedHeap::Z, zArguments, "z gc")) }; #define FOR_EACH_SUPPORTED_GC(var) \ @@ -90,14 +95,15 @@ bool GCConfig::_gc_selected_ergonomically = false; void GCConfig::fail_if_unsupported_gc_is_selected() { - NOT_CMSGC( FAIL_IF_SELECTED(UseConcMarkSweepGC, true)); - NOT_EPSILONGC( FAIL_IF_SELECTED(UseEpsilonGC, true)); - NOT_G1GC( FAIL_IF_SELECTED(UseG1GC, true)); - NOT_PARALLELGC(FAIL_IF_SELECTED(UseParallelGC, true)); - NOT_PARALLELGC(FAIL_IF_SELECTED(UseParallelOldGC, true)); - NOT_SERIALGC( FAIL_IF_SELECTED(UseSerialGC, true)); - NOT_SERIALGC( FAIL_IF_SELECTED(UseParallelOldGC, false)); - NOT_ZGC( FAIL_IF_SELECTED(UseZGC, true)); + NOT_CMSGC( FAIL_IF_SELECTED(UseConcMarkSweepGC, true)); + NOT_EPSILONGC( FAIL_IF_SELECTED(UseEpsilonGC, true)); + NOT_G1GC( FAIL_IF_SELECTED(UseG1GC, true)); + NOT_PARALLELGC( FAIL_IF_SELECTED(UseParallelGC, true)); + NOT_PARALLELGC( FAIL_IF_SELECTED(UseParallelOldGC, true)); + NOT_SERIALGC( FAIL_IF_SELECTED(UseSerialGC, true)); + NOT_SERIALGC( FAIL_IF_SELECTED(UseParallelOldGC, false)); + NOT_SHENANDOAHGC(FAIL_IF_SELECTED(UseShenandoahGC, true)); + NOT_ZGC( FAIL_IF_SELECTED(UseZGC, true)); } void GCConfig::select_gc_ergonomically() { --- old/src/hotspot/share/gc/shared/gcConfiguration.cpp 2018-11-30 21:07:48.513558985 +0100 +++ new/src/hotspot/share/gc/shared/gcConfiguration.cpp 2018-11-30 21:07:48.357560427 +0100 @@ -43,7 +43,7 @@ return ParNew; } - if (UseZGC) { + if (UseZGC || UseShenandoahGC) { return NA; } @@ -67,6 +67,10 @@ return Z; } + if (UseShenandoahGC) { + return Shenandoah; + } + return SerialOld; } --- old/src/hotspot/share/gc/shared/gcName.hpp 2018-11-30 21:07:48.743556858 +0100 +++ new/src/hotspot/share/gc/shared/gcName.hpp 2018-11-30 21:07:48.579558375 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 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 @@ -39,6 +39,7 @@ G1Old, G1Full, Z, + Shenandoah, NA, GCNameEndSentinel }; @@ -58,6 +59,7 @@ case G1Old: return "G1Old"; case G1Full: return "G1Full"; case Z: return "Z"; + case Shenandoah: return "Shenandoah"; case NA: return "N/A"; default: ShouldNotReachHere(); return NULL; } --- old/src/hotspot/share/gc/shared/gc_globals.hpp 2018-11-30 21:07:48.971554750 +0100 +++ new/src/hotspot/share/gc/shared/gc_globals.hpp 2018-11-30 21:07:48.815556192 +0100 @@ -44,6 +44,9 @@ #if INCLUDE_ZGC #include "gc/z/z_globals.hpp" #endif +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/shenandoah_globals.hpp" +#endif #define GC_FLAGS(develop, \ develop_pd, \ @@ -124,6 +127,22 @@ constraint, \ writeable)) \ \ + SHENANDOAHGC_ONLY(GC_SHENANDOAH_FLAGS( \ + develop, \ + develop_pd, \ + product, \ + product_pd, \ + diagnostic, \ + diagnostic_pd, \ + experimental, \ + notproduct, \ + manageable, \ + product_rw, \ + lp64_product, \ + range, \ + constraint, \ + writeable)) \ + \ SERIALGC_ONLY(GC_SERIAL_FLAGS( \ develop, \ develop_pd, \ @@ -179,6 +198,9 @@ experimental(bool, UseZGC, false, \ "Use the Z garbage collector") \ \ + experimental(bool, UseShenandoahGC, false, \ + "Use the Shenandoah garbage collector") \ + \ product(uint, ParallelGCThreads, 0, \ "Number of parallel threads parallel gc will use") \ constraint(ParallelGCThreadsConstraintFunc,AfterErgo) \ --- old/src/hotspot/share/gc/shared/referenceProcessor.cpp 2018-11-30 21:07:49.213552512 +0100 +++ new/src/hotspot/share/gc/shared/referenceProcessor.cpp 2018-11-30 21:07:49.054553983 +0100 @@ -1156,7 +1156,7 @@ // Check assumption that an object is not potentially // discovered twice except by concurrent collectors that potentially // trace the same Reference object twice. - assert(UseConcMarkSweepGC || UseG1GC, + assert(UseConcMarkSweepGC || UseG1GC || UseShenandoahGC, "Only possible with a concurrent marking collector"); return true; } --- old/src/hotspot/share/gc/shared/taskqueue.hpp 2018-11-30 21:07:49.448550340 +0100 +++ new/src/hotspot/share/gc/shared/taskqueue.hpp 2018-11-30 21:07:49.294551764 +0100 @@ -448,7 +448,7 @@ #undef TRACESPINNING class ParallelTaskTerminator: public StackObj { -private: +protected: uint _n_threads; TaskQueueSetSuper* _queue_set; volatile uint _offered_termination; @@ -481,7 +481,7 @@ // As above, but it also terminates if the should_exit_termination() // method of the terminator parameter returns true. If terminator is // NULL, then it is ignored. - bool offer_termination(TerminatorTerminator* terminator); + virtual bool offer_termination(TerminatorTerminator* terminator); // Reset the terminator, so that it may be reused again. // The caller is responsible for ensuring that this is done --- old/src/hotspot/share/gc/shared/vmStructs_gc.hpp 2018-11-30 21:07:49.669548297 +0100 +++ new/src/hotspot/share/gc/shared/vmStructs_gc.hpp 2018-11-30 21:07:49.518549693 +0100 @@ -53,6 +53,9 @@ #if INCLUDE_ZGC #include "gc/z/vmStructs_z.hpp" #endif +#if INCLUDE_SHENANDOAHGC +#include "gc/shenandoah/vmStructs_shenandoah.hpp" +#endif #define VM_STRUCTS_GC(nonstatic_field, \ volatile_nonstatic_field, \ @@ -67,6 +70,9 @@ G1GC_ONLY(VM_STRUCTS_G1GC(nonstatic_field, \ volatile_nonstatic_field, \ static_field)) \ + SHENANDOAHGC_ONLY(VM_STRUCTS_SHENANDOAH(nonstatic_field, \ + volatile_nonstatic_field, \ + static_field)) \ PARALLELGC_ONLY(VM_STRUCTS_PARALLELGC(nonstatic_field, \ volatile_nonstatic_field, \ static_field)) \ @@ -172,6 +178,9 @@ G1GC_ONLY(VM_TYPES_G1GC(declare_type, \ declare_toplevel_type, \ declare_integer_type)) \ + SHENANDOAHGC_ONLY(VM_TYPES_SHENANDOAH(declare_type, \ + declare_toplevel_type, \ + declare_integer_type)) \ PARALLELGC_ONLY(VM_TYPES_PARALLELGC(declare_type, \ declare_toplevel_type, \ declare_integer_type)) \ @@ -249,6 +258,8 @@ declare_constant_with_value)) \ G1GC_ONLY(VM_INT_CONSTANTS_G1GC(declare_constant, \ declare_constant_with_value)) \ + SHENANDOAHGC_ONLY(VM_INT_CONSTANTS_SHENANDOAH(declare_constant, \ + declare_constant_with_value)) \ PARALLELGC_ONLY(VM_INT_CONSTANTS_PARALLELGC(declare_constant, \ declare_constant_with_value)) \ SERIALGC_ONLY(VM_INT_CONSTANTS_SERIALGC(declare_constant, \