< prev index next >

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

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

*** 66,75 **** --- 66,77 ---- } void ShenandoahControlThread::run_service() { ShenandoahHeap* heap = ShenandoahHeap::heap(); + GCMode default_mode = heap->is_traversal_mode() ? concurrent_traversal : concurrent_normal; + GCCause::Cause default_cause = default_mode == concurrent_traversal ? GCCause::_shenandoah_traversal_gc : GCCause::_shenandoah_concurrent_gc; int sleep = ShenandoahControlIntervalMin; double last_shrink_time = os::elapsedTime(); double last_sleep_adjust_time = os::elapsedTime();
*** 121,135 **** heuristics->record_requested_gc(); if (ExplicitGCInvokesConcurrent) { policy->record_explicit_to_concurrent(); ! if (heuristics->can_do_traversal_gc()) { ! mode = concurrent_traversal; ! } else { ! mode = concurrent_normal; ! } // Unload and clean up everything heap->set_process_references(heuristics->can_process_references()); heap->set_unload_classes(heuristics->can_unload_classes()); } else { policy->record_explicit_to_full(); --- 123,133 ---- heuristics->record_requested_gc(); if (ExplicitGCInvokesConcurrent) { policy->record_explicit_to_concurrent(); ! mode = default_mode; // Unload and clean up everything heap->set_process_references(heuristics->can_process_references()); heap->set_unload_classes(heuristics->can_unload_classes()); } else { policy->record_explicit_to_full();
*** 141,171 **** heuristics->record_requested_gc(); if (ShenandoahImplicitGCInvokesConcurrent) { policy->record_implicit_to_concurrent(); ! if (heuristics->can_do_traversal_gc()) { ! mode = concurrent_traversal; ! } else { ! mode = concurrent_normal; ! } // Unload and clean up everything heap->set_process_references(heuristics->can_process_references()); heap->set_unload_classes(heuristics->can_unload_classes()); } else { policy->record_implicit_to_full(); mode = stw_full; } } else { // Potential normal cycle: ask heuristics if it wants to act ! if (heuristics->should_start_traversal_gc()) { ! mode = concurrent_traversal; ! cause = GCCause::_shenandoah_traversal_gc; ! } else if (heuristics->should_start_normal_gc()) { ! mode = concurrent_normal; ! cause = GCCause::_shenandoah_concurrent_gc; } // Ask policy if this cycle wants to process references or unload classes heap->set_process_references(heuristics->should_process_references()); heap->set_unload_classes(heuristics->should_unload_classes()); --- 139,162 ---- heuristics->record_requested_gc(); if (ShenandoahImplicitGCInvokesConcurrent) { policy->record_implicit_to_concurrent(); ! mode = default_mode; // Unload and clean up everything heap->set_process_references(heuristics->can_process_references()); heap->set_unload_classes(heuristics->can_unload_classes()); } else { policy->record_implicit_to_full(); mode = stw_full; } } else { // Potential normal cycle: ask heuristics if it wants to act ! if (heuristics->should_start_gc()) { ! mode = default_mode; ! cause = default_cause; } // Ask policy if this cycle wants to process references or unload classes heap->set_process_references(heuristics->should_process_references()); heap->set_unload_classes(heuristics->should_unload_classes());
< prev index next >