< 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 >