src/hotspot/share/gc/parallel/psVMOperations.cpp
changeset 57607 8d3886985964
parent 52876 2d17750d41e7
equal deleted inserted replaced
57606:b81062d47d61 57607:8d3886985964
    47   if (_result == NULL && GCLocker::is_active_and_needs_gc()) {
    47   if (_result == NULL && GCLocker::is_active_and_needs_gc()) {
    48     set_gc_locked();
    48     set_gc_locked();
    49   }
    49   }
    50 }
    50 }
    51 
    51 
       
    52 static bool is_cause_full(GCCause::Cause cause) {
       
    53   return (cause != GCCause::_gc_locker) && (cause != GCCause::_wb_young_gc)
       
    54          DEBUG_ONLY(&& (cause != GCCause::_scavenge_alot));
       
    55 }
       
    56 
    52 // Only used for System.gc() calls
    57 // Only used for System.gc() calls
    53 VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(uint gc_count,
    58 VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(uint gc_count,
    54                                              uint full_gc_count,
    59                                              uint full_gc_count,
    55                                              GCCause::Cause gc_cause) :
    60                                              GCCause::Cause gc_cause) :
    56   VM_GC_Operation(gc_count, gc_cause, full_gc_count, true /* full */)
    61   VM_GC_Operation(gc_count, gc_cause, full_gc_count, is_cause_full(gc_cause))
    57 {
    62 {
    58 }
    63 }
    59 
    64 
    60 void VM_ParallelGCSystemGC::doit() {
    65 void VM_ParallelGCSystemGC::doit() {
    61   SvcGCMarker sgcm(SvcGCMarker::FULL);
    66   SvcGCMarker sgcm(SvcGCMarker::FULL);
    62 
    67 
    63   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
    68   ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
    64 
    69 
    65   GCCauseSetter gccs(heap, _gc_cause);
    70   GCCauseSetter gccs(heap, _gc_cause);
    66   if (_gc_cause == GCCause::_gc_locker || _gc_cause == GCCause::_wb_young_gc
    71   if (!_full) {
    67       DEBUG_ONLY(|| _gc_cause == GCCause::_scavenge_alot)) {
       
    68     // If (and only if) the scavenge fails, this will invoke a full gc.
    72     // If (and only if) the scavenge fails, this will invoke a full gc.
    69     heap->invoke_scavenge();
    73     heap->invoke_scavenge();
    70   } else {
    74   } else {
    71     heap->do_full_collection(false);
    75     heap->do_full_collection(false);
    72   }
    76   }