--- old/src/share/vm/gc/g1/g1CollectedHeap.cpp 2017-03-06 14:47:03.866584685 +0100 +++ new/src/share/vm/gc/g1/g1CollectedHeap.cpp 2017-03-06 14:47:03.751581208 +0100 @@ -1378,10 +1378,9 @@ } _verifier->check_bitmaps("Full GC End"); - // Start a new incremental collection set for the next pause - collection_set()->start_incremental_building(); - - clear_cset_fast_test(); + double start = os::elapsedTime(); + start_new_collection_set(); + g1_policy()->phase_times()->record_start_new_cset_time_ms((os::elapsedTime() - start) * 1000.0); _allocator->init_mutator_alloc_region(); @@ -2694,9 +2693,12 @@ void G1CollectedHeap::gc_prologue(bool full /* Ignored */) { // always_do_update_barrier = false; assert(InlineCacheBuffer::is_empty(), "should have cleaned up ICBuffer"); + + double start = os::elapsedTime(); // Fill TLAB's and such - accumulate_statistics_all_tlabs(); + accumulate_statistics_all_tlabs(); ensure_parsability(true); + g1_policy()->phase_times()->record_prepare_tlab_time_ms((os::elapsedTime() - start) * 1000.0); g1_rem_set()->print_periodic_summary_info("Before GC RS summary", total_collections()); } @@ -2713,7 +2715,10 @@ #endif // always_do_update_barrier = true; + double start = os::elapsedTime(); resize_all_tlabs(); + g1_policy()->phase_times()->record_resize_tlab_time_ms((os::elapsedTime() - start) * 1000.0); + allocation_context_stats().update(full); // We have just completed a GC. Update the soft reference @@ -2996,6 +3001,15 @@ } }; +void G1CollectedHeap::start_new_collection_set() { + collection_set()->start_incremental_building(); + + clear_cset_fast_test(); + + guarantee(_eden.length() == 0, "eden should have been cleared"); + g1_policy()->transfer_survivors_to_cset(survivor()); +} + bool G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { assert_at_safepoint(true /* should_be_vm_thread */); @@ -3198,13 +3212,7 @@ _survivor_evac_stats.adjust_desired_plab_sz(); _old_evac_stats.adjust_desired_plab_sz(); - // Start a new incremental collection set for the next pause. - collection_set()->start_incremental_building(); - - clear_cset_fast_test(); - - guarantee(_eden.length() == 0, "eden should have been cleared"); - g1_policy()->transfer_survivors_to_cset(survivor()); + start_new_collection_set(); if (evacuation_failed()) { set_used(recalculate_used()); @@ -4522,7 +4530,9 @@ redirty_logged_cards(); #if defined(COMPILER2) || INCLUDE_JVMCI + double start = os::elapsedTime(); DerivedPointerTable::update_pointers(); + g1_policy()->phase_times()->record_derived_pointer_table_update_time((os::elapsedTime() - start) * 1000.0); #endif g1_policy()->print_age_table(); }