Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 20571:1d6eb209432a
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
author | sjohanss |
---|---|
date | Mon, 20 Oct 2014 10:18:17 +0200 |
parents | e7d0505c8a30 |
children | b12a2a9b05ca ee10217e3d03 |
comparison
equal
deleted
inserted
replaced
20570:1bd99e1dc168 | 20571:1d6eb209432a |
---|---|
2476 void G1CollectedHeap::collect(GCCause::Cause cause) { | 2476 void G1CollectedHeap::collect(GCCause::Cause cause) { |
2477 assert_heap_not_locked(); | 2477 assert_heap_not_locked(); |
2478 | 2478 |
2479 unsigned int gc_count_before; | 2479 unsigned int gc_count_before; |
2480 unsigned int old_marking_count_before; | 2480 unsigned int old_marking_count_before; |
2481 unsigned int full_gc_count_before; | |
2481 bool retry_gc; | 2482 bool retry_gc; |
2482 | 2483 |
2483 do { | 2484 do { |
2484 retry_gc = false; | 2485 retry_gc = false; |
2485 | 2486 |
2486 { | 2487 { |
2487 MutexLocker ml(Heap_lock); | 2488 MutexLocker ml(Heap_lock); |
2488 | 2489 |
2489 // Read the GC count while holding the Heap_lock | 2490 // Read the GC count while holding the Heap_lock |
2490 gc_count_before = total_collections(); | 2491 gc_count_before = total_collections(); |
2492 full_gc_count_before = total_full_collections(); | |
2491 old_marking_count_before = _old_marking_cycles_started; | 2493 old_marking_count_before = _old_marking_cycles_started; |
2492 } | 2494 } |
2493 | 2495 |
2494 if (should_do_concurrent_full_gc(cause)) { | 2496 if (should_do_concurrent_full_gc(cause)) { |
2495 // Schedule an initial-mark evacuation pause that will start a | 2497 // Schedule an initial-mark evacuation pause that will start a |
2530 g1_policy()->max_pause_time_ms(), | 2532 g1_policy()->max_pause_time_ms(), |
2531 cause); | 2533 cause); |
2532 VMThread::execute(&op); | 2534 VMThread::execute(&op); |
2533 } else { | 2535 } else { |
2534 // Schedule a Full GC. | 2536 // Schedule a Full GC. |
2535 VM_G1CollectFull op(gc_count_before, old_marking_count_before, cause); | 2537 VM_G1CollectFull op(gc_count_before, full_gc_count_before, cause); |
2536 VMThread::execute(&op); | 2538 VMThread::execute(&op); |
2537 } | 2539 } |
2538 } | 2540 } |
2539 } while (retry_gc); | 2541 } while (retry_gc); |
2540 } | 2542 } |