< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Print this page
rev 55538 : 8226757: Shenandoah: Make Traversal a separate mode

*** 48,74 **** #include "gc/shenandoah/shenandoahMarkCompact.hpp" #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" #include "gc/shenandoah/shenandoahMemoryPool.hpp" #include "gc/shenandoah/shenandoahMetrics.hpp" #include "gc/shenandoah/shenandoahMonitoringSupport.hpp" #include "gc/shenandoah/shenandoahOopClosures.inline.hpp" #include "gc/shenandoah/shenandoahPacer.inline.hpp" #include "gc/shenandoah/shenandoahRootProcessor.inline.hpp" #include "gc/shenandoah/shenandoahStringDedup.hpp" #include "gc/shenandoah/shenandoahTaskqueue.hpp" #include "gc/shenandoah/shenandoahUtils.hpp" #include "gc/shenandoah/shenandoahVerifier.hpp" #include "gc/shenandoah/shenandoahCodeRoots.hpp" #include "gc/shenandoah/shenandoahVMOperations.hpp" #include "gc/shenandoah/shenandoahWorkGroup.hpp" #include "gc/shenandoah/shenandoahWorkerPolicy.hpp" - #include "gc/shenandoah/heuristics/shenandoahAdaptiveHeuristics.hpp" - #include "gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.hpp" - #include "gc/shenandoah/heuristics/shenandoahCompactHeuristics.hpp" - #include "gc/shenandoah/heuristics/shenandoahPassiveHeuristics.hpp" - #include "gc/shenandoah/heuristics/shenandoahStaticHeuristics.hpp" - #include "gc/shenandoah/heuristics/shenandoahTraversalHeuristics.hpp" #if INCLUDE_JFR #include "gc/shenandoah/shenandoahJfrSupport.hpp" #endif #include "memory/metaspace.hpp" --- 48,71 ---- #include "gc/shenandoah/shenandoahMarkCompact.hpp" #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" #include "gc/shenandoah/shenandoahMemoryPool.hpp" #include "gc/shenandoah/shenandoahMetrics.hpp" #include "gc/shenandoah/shenandoahMonitoringSupport.hpp" + #include "gc/shenandoah/shenandoahNormalMode.hpp" #include "gc/shenandoah/shenandoahOopClosures.inline.hpp" #include "gc/shenandoah/shenandoahPacer.inline.hpp" + #include "gc/shenandoah/shenandoahPassiveMode.hpp" #include "gc/shenandoah/shenandoahRootProcessor.inline.hpp" #include "gc/shenandoah/shenandoahStringDedup.hpp" #include "gc/shenandoah/shenandoahTaskqueue.hpp" + #include "gc/shenandoah/shenandoahTraversalMode.hpp" #include "gc/shenandoah/shenandoahUtils.hpp" #include "gc/shenandoah/shenandoahVerifier.hpp" #include "gc/shenandoah/shenandoahCodeRoots.hpp" #include "gc/shenandoah/shenandoahVMOperations.hpp" #include "gc/shenandoah/shenandoahWorkGroup.hpp" #include "gc/shenandoah/shenandoahWorkerPolicy.hpp" #if INCLUDE_JFR #include "gc/shenandoah/shenandoahJfrSupport.hpp" #endif #include "memory/metaspace.hpp"
*** 365,375 **** _pacer->setup_for_idle(); } else { _pacer = NULL; } ! _traversal_gc = heuristics()->can_do_traversal_gc() ? new ShenandoahTraversalGC(this, _num_regions) : NULL; _control_thread = new ShenandoahControlThread(); --- 362,372 ---- _pacer->setup_for_idle(); } else { _pacer = NULL; } ! _traversal_gc = strcmp(ShenandoahGCMode, "traversal") == 0 ? new ShenandoahTraversalGC(this, _num_regions) : NULL; _control_thread = new ShenandoahControlThread();
*** 385,410 **** return JNI_OK; } void ShenandoahHeap::initialize_heuristics() { ! if (ShenandoahGCHeuristics != NULL) { ! if (strcmp(ShenandoahGCHeuristics, "aggressive") == 0) { ! _heuristics = new ShenandoahAggressiveHeuristics(); ! } else if (strcmp(ShenandoahGCHeuristics, "static") == 0) { ! _heuristics = new ShenandoahStaticHeuristics(); ! } else if (strcmp(ShenandoahGCHeuristics, "adaptive") == 0) { ! _heuristics = new ShenandoahAdaptiveHeuristics(); ! } else if (strcmp(ShenandoahGCHeuristics, "passive") == 0) { ! _heuristics = new ShenandoahPassiveHeuristics(); ! } else if (strcmp(ShenandoahGCHeuristics, "compact") == 0) { ! _heuristics = new ShenandoahCompactHeuristics(); ! } else if (strcmp(ShenandoahGCHeuristics, "traversal") == 0) { ! _heuristics = new ShenandoahTraversalHeuristics(); } else { ! vm_exit_during_initialization("Unknown -XX:ShenandoahGCHeuristics option"); } if (_heuristics->is_diagnostic() && !UnlockDiagnosticVMOptions) { vm_exit_during_initialization( err_msg("Heuristics \"%s\" is diagnostic, and must be enabled via -XX:+UnlockDiagnosticVMOptions.", _heuristics->name())); --- 382,406 ---- return JNI_OK; } void ShenandoahHeap::initialize_heuristics() { ! if (ShenandoahGCMode != NULL) { ! if (strcmp(ShenandoahGCMode, "traversal") == 0) { ! _gc_mode = new ShenandoahTraversalMode(); ! } else if (strcmp(ShenandoahGCMode, "normal") == 0) { ! _gc_mode = new ShenandoahNormalMode(); ! } else if (strcmp(ShenandoahGCMode, "passive") == 0) { ! _gc_mode = new ShenandoahPassiveMode(); } else { ! vm_exit_during_initialization("Unknown -XX:ShenandoahGCMode option"); } + } else { + ShouldNotReachHere(); + } + _gc_mode->initialize_flags(); + _heuristics = _gc_mode->initialize_heuristics(); if (_heuristics->is_diagnostic() && !UnlockDiagnosticVMOptions) { vm_exit_during_initialization( err_msg("Heuristics \"%s\" is diagnostic, and must be enabled via -XX:+UnlockDiagnosticVMOptions.", _heuristics->name()));
*** 414,427 **** err_msg("Heuristics \"%s\" is experimental, and must be enabled via -XX:+UnlockExperimentalVMOptions.", _heuristics->name())); } log_info(gc, init)("Shenandoah heuristics: %s", _heuristics->name()); - } else { - ShouldNotReachHere(); - } - } #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable:4355 ) // 'this' : used in base member initializer list --- 410,419 ----
*** 1702,1712 **** // Note that we can only do this for "outside-cycle" degens, otherwise we would risk // changing the cycle parameters mid-cycle during concurrent -> degenerated handover. set_process_references(heuristics()->can_process_references()); set_unload_classes(heuristics()->can_unload_classes()); ! if (heuristics()->can_do_traversal_gc()) { // Not possible to degenerate from here, upgrade to Full GC right away. cancel_gc(GCCause::_shenandoah_upgrade_to_full_gc); op_degenerated_fail(); return; } --- 1694,1704 ---- // Note that we can only do this for "outside-cycle" degens, otherwise we would risk // changing the cycle parameters mid-cycle during concurrent -> degenerated handover. set_process_references(heuristics()->can_process_references()); set_unload_classes(heuristics()->can_unload_classes()); ! if (is_traversal_mode()) { // Not possible to degenerate from here, upgrade to Full GC right away. cancel_gc(GCCause::_shenandoah_upgrade_to_full_gc); op_degenerated_fail(); return; }
< prev index next >