提交 c444407b 编写于 作者: S sjohanss

8058568: GC cleanup phase can cause G1 skipping a System.gc()

Summary: Marking G1 FullGC as a _full collection and passing down the correct before count.
Reviewed-by: brutisso, mgerdin
上级 9839aaf9
...@@ -2478,6 +2478,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { ...@@ -2478,6 +2478,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) {
unsigned int gc_count_before; unsigned int gc_count_before;
unsigned int old_marking_count_before; unsigned int old_marking_count_before;
unsigned int full_gc_count_before;
bool retry_gc; bool retry_gc;
do { do {
...@@ -2488,6 +2489,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { ...@@ -2488,6 +2489,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) {
// Read the GC count while holding the Heap_lock // Read the GC count while holding the Heap_lock
gc_count_before = total_collections(); gc_count_before = total_collections();
full_gc_count_before = total_full_collections();
old_marking_count_before = _old_marking_cycles_started; old_marking_count_before = _old_marking_cycles_started;
} }
...@@ -2532,7 +2534,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) { ...@@ -2532,7 +2534,7 @@ void G1CollectedHeap::collect(GCCause::Cause cause) {
VMThread::execute(&op); VMThread::execute(&op);
} else { } else {
// Schedule a Full GC. // Schedule a Full GC.
VM_G1CollectFull op(gc_count_before, old_marking_count_before, cause); VM_G1CollectFull op(gc_count_before, full_gc_count_before, cause);
VMThread::execute(&op); VMThread::execute(&op);
} }
} }
......
...@@ -60,7 +60,7 @@ public: ...@@ -60,7 +60,7 @@ public:
VM_G1CollectFull(unsigned int gc_count_before, VM_G1CollectFull(unsigned int gc_count_before,
unsigned int full_gc_count_before, unsigned int full_gc_count_before,
GCCause::Cause cause) GCCause::Cause cause)
: VM_GC_Operation(gc_count_before, cause, full_gc_count_before) { } : VM_GC_Operation(gc_count_before, cause, full_gc_count_before, true) { }
virtual VMOp_Type type() const { return VMOp_G1CollectFull; } virtual VMOp_Type type() const { return VMOp_G1CollectFull; }
virtual void doit(); virtual void doit();
virtual const char* name() const { virtual const char* name() const {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册