hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
changeset 21767 41eaa9a17059
parent 21563 ccbd86010788
child 22203 d748cd0e8b1e
equal deleted inserted replaced
21766:941f6e3a1567 21767:41eaa9a17059
    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.