hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp
changeset 7896 08aadd7aa3ee
parent 7397 5b173b4ca846
child 8295 a2b2a8a3aaee
equal deleted inserted replaced
7895:e71bad345f3a 7896:08aadd7aa3ee
    40   _result(NULL)
    40   _result(NULL)
    41 {
    41 {
    42 }
    42 }
    43 
    43 
    44 void VM_ParallelGCFailedAllocation::doit() {
    44 void VM_ParallelGCFailedAllocation::doit() {
    45   JvmtiGCForAllocationMarker jgcm;
    45   SvcGCMarker sgcm(SvcGCMarker::MINOR);
    46   notify_gc_begin(false);
       
    47 
    46 
    48   ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
    47   ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
    49   assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "must be a ParallelScavengeHeap");
    48   assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "must be a ParallelScavengeHeap");
    50 
    49 
    51   GCCauseSetter gccs(heap, _gc_cause);
    50   GCCauseSetter gccs(heap, _gc_cause);
    52   _result = heap->failed_mem_allocate(_size, _is_tlab);
    51   _result = heap->failed_mem_allocate(_size, _is_tlab);
    53 
    52 
    54   if (_result == NULL && GC_locker::is_active_and_needs_gc()) {
    53   if (_result == NULL && GC_locker::is_active_and_needs_gc()) {
    55     set_gc_locked();
    54     set_gc_locked();
    56   }
    55   }
    57 
       
    58   notify_gc_end();
       
    59 }
    56 }
    60 
    57 
    61 VM_ParallelGCFailedPermanentAllocation::VM_ParallelGCFailedPermanentAllocation(size_t size,
    58 VM_ParallelGCFailedPermanentAllocation::VM_ParallelGCFailedPermanentAllocation(size_t size,
    62   unsigned int gc_count, unsigned int full_gc_count) :
    59   unsigned int gc_count, unsigned int full_gc_count) :
    63   VM_GC_Operation(gc_count, full_gc_count, true /* full */),
    60   VM_GC_Operation(gc_count, full_gc_count, true /* full */),
    65   _result(NULL)
    62   _result(NULL)
    66 {
    63 {
    67 }
    64 }
    68 
    65 
    69 void VM_ParallelGCFailedPermanentAllocation::doit() {
    66 void VM_ParallelGCFailedPermanentAllocation::doit() {
    70   JvmtiGCFullMarker jgcm;
    67   SvcGCMarker sgcm(SvcGCMarker::FULL);
    71   notify_gc_begin(true);
       
    72 
    68 
    73   ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
    69   ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
    74   assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "must be a ParallelScavengeHeap");
    70   assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "must be a ParallelScavengeHeap");
    75 
    71 
    76   GCCauseSetter gccs(heap, _gc_cause);
    72   GCCauseSetter gccs(heap, _gc_cause);
    77   _result = heap->failed_permanent_mem_allocate(_size);
    73   _result = heap->failed_permanent_mem_allocate(_size);
    78   if (_result == NULL && GC_locker::is_active_and_needs_gc()) {
    74   if (_result == NULL && GC_locker::is_active_and_needs_gc()) {
    79     set_gc_locked();
    75     set_gc_locked();
    80   }
    76   }
    81   notify_gc_end();
       
    82 }
    77 }
    83 
    78 
    84 // Only used for System.gc() calls
    79 // Only used for System.gc() calls
    85 VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(unsigned int gc_count,
    80 VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(unsigned int gc_count,
    86                                              unsigned int full_gc_count,
    81                                              unsigned int full_gc_count,
    89 {
    84 {
    90   _gc_cause = gc_cause;
    85   _gc_cause = gc_cause;
    91 }
    86 }
    92 
    87 
    93 void VM_ParallelGCSystemGC::doit() {
    88 void VM_ParallelGCSystemGC::doit() {
    94   JvmtiGCFullMarker jgcm;
    89   SvcGCMarker sgcm(SvcGCMarker::FULL);
    95   notify_gc_begin(true);
       
    96 
    90 
    97   ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
    91   ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
    98   assert(heap->kind() == CollectedHeap::ParallelScavengeHeap,
    92   assert(heap->kind() == CollectedHeap::ParallelScavengeHeap,
    99     "must be a ParallelScavengeHeap");
    93     "must be a ParallelScavengeHeap");
   100 
    94 
   104     // If (and only if) the scavenge fails, this will invoke a full gc.
    98     // If (and only if) the scavenge fails, this will invoke a full gc.
   105     heap->invoke_scavenge();
    99     heap->invoke_scavenge();
   106   } else {
   100   } else {
   107     heap->invoke_full_gc(false);
   101     heap->invoke_full_gc(false);
   108   }
   102   }
   109   notify_gc_end();
       
   110 }
   103 }