equal
deleted
inserted
replaced
54 #include "memory/generationSpec.hpp" |
54 #include "memory/generationSpec.hpp" |
55 #include "memory/referenceProcessor.hpp" |
55 #include "memory/referenceProcessor.hpp" |
56 #include "oops/oop.inline.hpp" |
56 #include "oops/oop.inline.hpp" |
57 #include "oops/oop.pcgc.inline.hpp" |
57 #include "oops/oop.pcgc.inline.hpp" |
58 #include "runtime/vmThread.hpp" |
58 #include "runtime/vmThread.hpp" |
|
59 #include "utilities/ticks.hpp" |
59 |
60 |
60 size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0; |
61 size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0; |
61 |
62 |
62 // turn it on so that the contents of the young list (scan-only / |
63 // turn it on so that the contents of the young list (scan-only / |
63 // to-be-collected) are printed at "strategic" points before / during |
64 // to-be-collected) are printed at "strategic" points before / during |
1282 if (GC_locker::check_active_before_gc()) { |
1283 if (GC_locker::check_active_before_gc()) { |
1283 return false; |
1284 return false; |
1284 } |
1285 } |
1285 |
1286 |
1286 STWGCTimer* gc_timer = G1MarkSweep::gc_timer(); |
1287 STWGCTimer* gc_timer = G1MarkSweep::gc_timer(); |
1287 gc_timer->register_gc_start(os::elapsed_counter()); |
1288 gc_timer->register_gc_start(); |
1288 |
1289 |
1289 SerialOldTracer* gc_tracer = G1MarkSweep::gc_tracer(); |
1290 SerialOldTracer* gc_tracer = G1MarkSweep::gc_tracer(); |
1290 gc_tracer->report_gc_start(gc_cause(), gc_timer->gc_start()); |
1291 gc_tracer->report_gc_start(gc_cause(), gc_timer->gc_start()); |
1291 |
1292 |
1292 SvcGCMarker sgcm(SvcGCMarker::FULL); |
1293 SvcGCMarker sgcm(SvcGCMarker::FULL); |
1550 print_heap_after_gc(); |
1551 print_heap_after_gc(); |
1551 trace_heap_after_gc(gc_tracer); |
1552 trace_heap_after_gc(gc_tracer); |
1552 |
1553 |
1553 post_full_gc_dump(gc_timer); |
1554 post_full_gc_dump(gc_timer); |
1554 |
1555 |
1555 gc_timer->register_gc_end(os::elapsed_counter()); |
1556 gc_timer->register_gc_end(); |
1556 gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions()); |
1557 gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions()); |
1557 } |
1558 } |
1558 |
1559 |
1559 return true; |
1560 return true; |
1560 } |
1561 } |
2480 // and it's waiting for a full GC to finish will be woken up. It is |
2481 // and it's waiting for a full GC to finish will be woken up. It is |
2481 // waiting in VM_G1IncCollectionPause::doit_epilogue(). |
2482 // waiting in VM_G1IncCollectionPause::doit_epilogue(). |
2482 FullGCCount_lock->notify_all(); |
2483 FullGCCount_lock->notify_all(); |
2483 } |
2484 } |
2484 |
2485 |
2485 void G1CollectedHeap::register_concurrent_cycle_start(jlong start_time) { |
2486 void G1CollectedHeap::register_concurrent_cycle_start(const Ticks& start_time) { |
2486 _concurrent_cycle_started = true; |
2487 _concurrent_cycle_started = true; |
2487 _gc_timer_cm->register_gc_start(start_time); |
2488 _gc_timer_cm->register_gc_start(start_time); |
2488 |
2489 |
2489 _gc_tracer_cm->report_gc_start(gc_cause(), _gc_timer_cm->gc_start()); |
2490 _gc_tracer_cm->report_gc_start(gc_cause(), _gc_timer_cm->gc_start()); |
2490 trace_heap_before_gc(_gc_tracer_cm); |
2491 trace_heap_before_gc(_gc_tracer_cm); |
2494 if (_concurrent_cycle_started) { |
2495 if (_concurrent_cycle_started) { |
2495 if (_cm->has_aborted()) { |
2496 if (_cm->has_aborted()) { |
2496 _gc_tracer_cm->report_concurrent_mode_failure(); |
2497 _gc_tracer_cm->report_concurrent_mode_failure(); |
2497 } |
2498 } |
2498 |
2499 |
2499 _gc_timer_cm->register_gc_end(os::elapsed_counter()); |
2500 _gc_timer_cm->register_gc_end(); |
2500 _gc_tracer_cm->report_gc_end(_gc_timer_cm->gc_end(), _gc_timer_cm->time_partitions()); |
2501 _gc_tracer_cm->report_gc_end(_gc_timer_cm->gc_end(), _gc_timer_cm->time_partitions()); |
2501 |
2502 |
2502 _concurrent_cycle_started = false; |
2503 _concurrent_cycle_started = false; |
2503 } |
2504 } |
2504 } |
2505 } |
3885 |
3886 |
3886 if (GC_locker::check_active_before_gc()) { |
3887 if (GC_locker::check_active_before_gc()) { |
3887 return false; |
3888 return false; |
3888 } |
3889 } |
3889 |
3890 |
3890 _gc_timer_stw->register_gc_start(os::elapsed_counter()); |
3891 _gc_timer_stw->register_gc_start(); |
3891 |
3892 |
3892 _gc_tracer_stw->report_gc_start(gc_cause(), _gc_timer_stw->gc_start()); |
3893 _gc_tracer_stw->report_gc_start(gc_cause(), _gc_timer_stw->gc_start()); |
3893 |
3894 |
3894 SvcGCMarker sgcm(SvcGCMarker::MINOR); |
3895 SvcGCMarker sgcm(SvcGCMarker::MINOR); |
3895 ResourceMark rm; |
3896 ResourceMark rm; |
4263 // before any GC notifications are raised. |
4264 // before any GC notifications are raised. |
4264 g1mm()->update_sizes(); |
4265 g1mm()->update_sizes(); |
4265 |
4266 |
4266 _gc_tracer_stw->report_evacuation_info(&evacuation_info); |
4267 _gc_tracer_stw->report_evacuation_info(&evacuation_info); |
4267 _gc_tracer_stw->report_tenuring_threshold(_g1_policy->tenuring_threshold()); |
4268 _gc_tracer_stw->report_tenuring_threshold(_g1_policy->tenuring_threshold()); |
4268 _gc_timer_stw->register_gc_end(os::elapsed_counter()); |
4269 _gc_timer_stw->register_gc_end(); |
4269 _gc_tracer_stw->report_gc_end(_gc_timer_stw->gc_end(), _gc_timer_stw->time_partitions()); |
4270 _gc_tracer_stw->report_gc_end(_gc_timer_stw->gc_end(), _gc_timer_stw->time_partitions()); |
4270 } |
4271 } |
4271 // It should now be safe to tell the concurrent mark thread to start |
4272 // It should now be safe to tell the concurrent mark thread to start |
4272 // without its logging output interfering with the logging output |
4273 // without its logging output interfering with the logging output |
4273 // that came from the pause. |
4274 // that came from the pause. |