< prev index next >
src/share/vm/gc/shenandoah/vm_operations_shenandoah.cpp
Print this page
rev 13068 : [mq]: partial.patch
*** 24,33 ****
--- 24,34 ----
#include "gc/shared/gcTraceTime.inline.hpp"
#include "gc/shenandoah/shenandoahCollectorPolicy.hpp"
#include "gc/shenandoah/shenandoahMarkCompact.hpp"
#include "gc/shenandoah/shenandoahConcurrentMark.inline.hpp"
#include "gc/shenandoah/shenandoahHeap.inline.hpp"
+ #include "gc/shenandoah/shenandoahPartialGC.hpp"
#include "gc/shenandoah/shenandoahWorkGroup.hpp"
#include "gc/shenandoah/vm_operations_shenandoah.hpp"
void VM_ShenandoahInitMark::doit() {
GCIdMark gc_id_mark(_gc_id);
*** 58,74 ****
}
void VM_ShenandoahFullGC::doit() {
GCIdMark gc_id_mark(_gc_id);
- ShenandoahMarkCompact::do_mark_compact(_gc_cause);
ShenandoahHeap *sh = ShenandoahHeap::heap();
if (UseTLAB) {
sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::resize_tlabs);
sh->resize_all_tlabs();
sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
}
}
bool VM_ShenandoahReferenceOperation::doit_prologue() {
Heap_lock->lock();
return true;
--- 59,77 ----
}
void VM_ShenandoahFullGC::doit() {
GCIdMark gc_id_mark(_gc_id);
ShenandoahHeap *sh = ShenandoahHeap::heap();
+ sh->shenandoahPolicy()->record_gc_start();
+ ShenandoahMarkCompact::do_mark_compact(_gc_cause);
if (UseTLAB) {
sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::resize_tlabs);
sh->resize_all_tlabs();
sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
}
+ sh->shenandoahPolicy()->record_gc_end();
}
bool VM_ShenandoahReferenceOperation::doit_prologue() {
Heap_lock->lock();
return true;
*** 82,95 ****
}
void VM_ShenandoahStartEvacuation::doit() {
GCIdMark gc_id_mark(_gc_id);
// It is critical that we
// evacuate roots right after finishing marking, so that we don't
// get unmarked objects in the roots.
- ShenandoahHeap *sh = ShenandoahHeap::heap();
// Setup workers for final marking
WorkGang* workers = sh->workers();
uint n_workers = ShenandoahCollectorPolicy::calc_workers_for_final_marking(workers->active_workers(),
Threads::number_of_non_daemon_threads());
ShenandoahWorkerScope scope(workers, n_workers);
--- 85,100 ----
}
void VM_ShenandoahStartEvacuation::doit() {
GCIdMark gc_id_mark(_gc_id);
+ ShenandoahHeap *sh = ShenandoahHeap::heap();
+ sh->shenandoahPolicy()->record_gc_start();
+
// It is critical that we
// evacuate roots right after finishing marking, so that we don't
// get unmarked objects in the roots.
// Setup workers for final marking
WorkGang* workers = sh->workers();
uint n_workers = ShenandoahCollectorPolicy::calc_workers_for_final_marking(workers->active_workers(),
Threads::number_of_non_daemon_threads());
ShenandoahWorkerScope scope(workers, n_workers);
*** 119,128 ****
--- 124,143 ----
} else {
GCTraceTime(Info, gc) time("Cancel Concurrent Mark", sh->gc_timer(), GCCause::_no_gc, true);
sh->concurrentMark()->cancel();
sh->stop_concurrent_marking();
}
+
+ sh->shenandoahPolicy()->record_gc_end();
+ }
+
+ void VM_ShenandoahPartialGC::doit() {
+ GCIdMark gc_id_mark(_gc_id);
+ ShenandoahHeap *sh = ShenandoahHeap::heap();
+ sh->shenandoahPolicy()->record_gc_start();
+ ShenandoahHeap::heap()->do_partial_collection();
+ sh->shenandoahPolicy()->record_gc_end();
}
void VM_ShenandoahVerifyHeapAfterEvacuation::doit() {
GCIdMark gc_id_mark(_gc_id);
ShenandoahHeap *sh = ShenandoahHeap::heap();
< prev index next >