# HG changeset patch # User rkennke # Date 1586182958 -7200 # Mon Apr 06 16:22:38 2020 +0200 # Node ID bcafcc8dbe5069b82c4ac92c7fde8a3245a90ca8 # Parent 0c8345a2ad50c88aa951b486fc2d0c1dd5badcf3 8242217: Shenandoah: Enable GC mode to be diagnostic/experimental and have a name diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -406,6 +406,19 @@ ShouldNotReachHere(); } _gc_mode->initialize_flags(); + if (_gc_mode->is_diagnostic() && !UnlockDiagnosticVMOptions) { + vm_exit_during_initialization( + err_msg("GC mode \"%s\" is diagnostic, and must be enabled via -XX:+UnlockDiagnosticVMOptions.", + _gc_mode->name())); + } + if (_gc_mode->is_experimental() && !UnlockExperimentalVMOptions) { + vm_exit_during_initialization( + err_msg("GC mode \"%s\" is experimental, and must be enabled via -XX:+UnlockExperimentalVMOptions.", + _gc_mode->name())); + } + log_info(gc, init)("Shenandoah GC mode: %s", + _gc_mode->name()); + _heuristics = _gc_mode->initialize_heuristics(); if (_heuristics->is_diagnostic() && !UnlockDiagnosticVMOptions) { diff --git a/src/hotspot/share/gc/shenandoah/shenandoahMode.hpp b/src/hotspot/share/gc/shenandoah/shenandoahMode.hpp --- a/src/hotspot/share/gc/shenandoah/shenandoahMode.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahMode.hpp @@ -33,6 +33,9 @@ public: virtual void initialize_flags() const = 0; virtual ShenandoahHeuristics* initialize_heuristics() const = 0; + virtual const char* name() = 0; + virtual bool is_diagnostic() = 0; + virtual bool is_experimental() = 0; }; #endif // SHARE_GC_SHENANDOAH_SHENANDOAHMODE_HPP diff --git a/src/hotspot/share/gc/shenandoah/shenandoahNormalMode.hpp b/src/hotspot/share/gc/shenandoah/shenandoahNormalMode.hpp --- a/src/hotspot/share/gc/shenandoah/shenandoahNormalMode.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahNormalMode.hpp @@ -33,6 +33,9 @@ public: virtual void initialize_flags() const; virtual ShenandoahHeuristics* initialize_heuristics() const; + virtual const char* name() { return "Normal"; } + virtual bool is_diagnostic() { return false; } + virtual bool is_experimental() { return false; } }; #endif // SHARE_GC_SHENANDOAH_SHENANDOAHNORMALMODE_HPP diff --git a/src/hotspot/share/gc/shenandoah/shenandoahPassiveMode.hpp b/src/hotspot/share/gc/shenandoah/shenandoahPassiveMode.hpp --- a/src/hotspot/share/gc/shenandoah/shenandoahPassiveMode.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahPassiveMode.hpp @@ -31,6 +31,10 @@ public: virtual void initialize_flags() const; virtual ShenandoahHeuristics* initialize_heuristics() const; + + virtual const char* name() { return "Passive"; } + virtual bool is_diagnostic() { return true; } + virtual bool is_experimental() { return false; } }; #endif // SHARE_GC_SHENANDOAH_SHENANDOAHNORMALMODE_HPP