1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp Tue Feb 04 17:38:01 2020 +0800 1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp Tue Feb 04 18:13:14 2020 +0800 1.3 @@ -52,11 +52,16 @@ 1.4 } 1.5 } 1.6 1.7 +static bool is_cause_full(GCCause::Cause cause) { 1.8 + return (cause != GCCause::_gc_locker) && (cause != GCCause::_wb_young_gc) 1.9 + DEBUG_ONLY(&& (cause != GCCause::_scavenge_alot)); 1.10 +} 1.11 + 1.12 // Only used for System.gc() calls 1.13 VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(uint gc_count, 1.14 uint full_gc_count, 1.15 GCCause::Cause gc_cause) : 1.16 - VM_GC_Operation(gc_count, gc_cause, full_gc_count, true /* full */) 1.17 + VM_GC_Operation(gc_count, gc_cause, full_gc_count, is_cause_full(gc_cause)) 1.18 { 1.19 } 1.20 1.21 @@ -68,8 +73,7 @@ 1.22 "must be a ParallelScavengeHeap"); 1.23 1.24 GCCauseSetter gccs(heap, _gc_cause); 1.25 - if (_gc_cause == GCCause::_gc_locker || _gc_cause == GCCause::_wb_young_gc 1.26 - DEBUG_ONLY(|| _gc_cause == GCCause::_scavenge_alot)) { 1.27 + if (!_full) { 1.28 // If (and only if) the scavenge fails, this will invoke a full gc. 1.29 heap->invoke_scavenge(); 1.30 } else {