< prev index next >

src/share/vm/gc/g1/g1MarkSweep.cpp

Print this page
rev 13070 : imported patch 8177544-full-gc-scope

*** 27,36 **** --- 27,37 ---- #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" + #include "gc/g1/g1FullGCScope.hpp" #include "gc/g1/g1MarkSweep.hpp" #include "gc/g1/g1RootProcessor.hpp" #include "gc/g1/g1StringDedup.hpp" #include "gc/serial/markSweep.inline.hpp" #include "gc/shared/gcHeapSummary.hpp"
*** 57,67 **** --- 58,72 ---- class HeapRegion; void G1MarkSweep::invoke_at_safepoint(ReferenceProcessor* rp, bool clear_all_softrefs) { assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint"); + HandleMark hm; // Discard invalid handles created during gc + #if defined(COMPILER2) || INCLUDE_JVMCI + DerivedPointerTable::clear(); + #endif #ifdef ASSERT if (G1CollectedHeap::heap()->collector_policy()->should_clear_all_soft_refs()) { assert(clear_all_softrefs, "Policy should have been checked earler"); } #endif
*** 83,116 **** --- 88,137 ---- // We should save the marks of the currently locked biased monitors. // The marking doesn't preserve the marks of biased objects. BiasedLocking::preserve_marks(); + // Process roots and do the marking. mark_sweep_phase1(marked_for_unloading, clear_all_softrefs); + // Prepare compaction. mark_sweep_phase2(); #if defined(COMPILER2) || INCLUDE_JVMCI // Don't add any more derived pointers during phase3 DerivedPointerTable::set_active(false); #endif + // Adjust all pointers. mark_sweep_phase3(); + // Do the actual compaction. mark_sweep_phase4(); GenMarkSweep::restore_marks(); BiasedLocking::restore_marks(); GenMarkSweep::deallocate_stacks(); + #if defined(COMPILER2) || INCLUDE_JVMCI + // Now update the derived pointers. + DerivedPointerTable::update_pointers(); + #endif + CodeCache::gc_epilogue(); JvmtiExport::gc_epilogue(); // refs processing: clean slate GenMarkSweep::set_ref_processor(NULL); } + STWGCTimer* G1MarkSweep::gc_timer() { + return G1FullGCScope::instance()->timer(); + } + + SerialOldTracer* G1MarkSweep::gc_tracer() { + return G1FullGCScope::instance()->tracer(); + } void G1MarkSweep::allocate_stacks() { GenMarkSweep::_preserved_count_max = 0; GenMarkSweep::_preserved_marks = NULL; GenMarkSweep::_preserved_count = 0;
< prev index next >