Path: blob/master/src/hotspot/share/gc/parallel/gcAdaptivePolicyCounters.cpp
41152 views
/*1* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#include "precompiled.hpp"25#include "gc/parallel/gcAdaptivePolicyCounters.hpp"26#include "memory/resourceArea.hpp"2728// This class keeps statistical information and computes the29// size of the heap.3031GCAdaptivePolicyCounters::GCAdaptivePolicyCounters(const char* name,32int collectors,33int generations,34AdaptiveSizePolicy* size_policy_arg)35: GCPolicyCounters(name, collectors, generations),36_size_policy(size_policy_arg) {37if (UsePerfData) {38EXCEPTION_MARK;39ResourceMark rm;4041const char* cname = PerfDataManager::counter_name(name_space(), "edenSize");42_eden_size_counter = PerfDataManager::create_variable(SUN_GC, cname,43PerfData::U_Bytes, _size_policy->calculated_eden_size_in_bytes(), CHECK);4445cname = PerfDataManager::counter_name(name_space(), "promoSize");46_promo_size_counter = PerfDataManager::create_variable(SUN_GC, cname,47PerfData::U_Bytes, size_policy()->calculated_promo_size_in_bytes(),48CHECK);4950cname = PerfDataManager::counter_name(name_space(), "youngCapacity");51size_t young_capacity_in_bytes =52_size_policy->calculated_eden_size_in_bytes() +53_size_policy->calculated_survivor_size_in_bytes();54_young_capacity_counter = PerfDataManager::create_variable(SUN_GC, cname,55PerfData::U_Bytes, young_capacity_in_bytes, CHECK);5657cname = PerfDataManager::counter_name(name_space(), "avgSurvivedAvg");58_avg_survived_avg_counter = PerfDataManager::create_variable(SUN_GC, cname,59PerfData::U_Bytes, size_policy()->calculated_survivor_size_in_bytes(),60CHECK);6162cname = PerfDataManager::counter_name(name_space(), "avgSurvivedDev");63_avg_survived_dev_counter = PerfDataManager::create_variable(SUN_GC, cname,64PerfData::U_Bytes, (jlong) 0 , CHECK);6566cname = PerfDataManager::counter_name(name_space(), "avgSurvivedPaddedAvg");67_avg_survived_padded_avg_counter =68PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,69size_policy()->calculated_survivor_size_in_bytes(), CHECK);7071cname = PerfDataManager::counter_name(name_space(), "avgMinorPauseTime");72_avg_minor_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,73PerfData::U_Ticks, (jlong) _size_policy->_avg_minor_pause->average(),74CHECK);7576cname = PerfDataManager::counter_name(name_space(), "avgMinorIntervalTime");77_avg_minor_interval_counter = PerfDataManager::create_variable(SUN_GC,78cname,79PerfData::U_Ticks,80(jlong) _size_policy->_avg_minor_interval->average(),81CHECK);8283#ifdef NOT_PRODUCT84// This is a counter for the most recent minor pause time85// (the last sample, not the average). It is useful for86// verifying the average pause time but not worth putting87// into the product.88cname = PerfDataManager::counter_name(name_space(), "minorPauseTime");89_minor_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,90PerfData::U_Ticks, (jlong) _size_policy->_avg_minor_pause->last_sample(),91CHECK);92#endif9394cname = PerfDataManager::counter_name(name_space(), "minorGcCost");95_minor_gc_cost_counter = PerfDataManager::create_variable(SUN_GC,96cname,97PerfData::U_Ticks,98(jlong) _size_policy->minor_gc_cost(),99CHECK);100101cname = PerfDataManager::counter_name(name_space(), "mutatorCost");102_mutator_cost_counter = PerfDataManager::create_variable(SUN_GC, cname,103PerfData::U_Ticks, (jlong) _size_policy->mutator_cost(), CHECK);104105cname = PerfDataManager::counter_name(name_space(), "survived");106_survived_counter = PerfDataManager::create_variable(SUN_GC, cname,107PerfData::U_Bytes, (jlong) 0, CHECK);108109cname = PerfDataManager::counter_name(name_space(), "promoted");110_promoted_counter = PerfDataManager::create_variable(SUN_GC, cname,111PerfData::U_Bytes, (jlong) 0, CHECK);112113cname = PerfDataManager::counter_name(name_space(), "avgYoungLive");114_avg_young_live_counter = PerfDataManager::create_variable(SUN_GC, cname,115PerfData::U_Bytes, (jlong) size_policy()->avg_young_live()->average(),116CHECK);117118cname = PerfDataManager::counter_name(name_space(), "avgOldLive");119_avg_old_live_counter = PerfDataManager::create_variable(SUN_GC, cname,120PerfData::U_Bytes, (jlong) size_policy()->avg_old_live()->average(),121CHECK);122123cname = PerfDataManager::counter_name(name_space(), "survivorOverflowed");124_survivor_overflowed_counter = PerfDataManager::create_variable(SUN_GC, cname,125PerfData::U_Events, (jlong)0, CHECK);126127cname = PerfDataManager::counter_name(name_space(),128"decrementTenuringThresholdForGcCost");129_decrement_tenuring_threshold_for_gc_cost_counter =130PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,131(jlong)0, CHECK);132133cname = PerfDataManager::counter_name(name_space(),134"incrementTenuringThresholdForGcCost");135_increment_tenuring_threshold_for_gc_cost_counter =136PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,137(jlong)0, CHECK);138139cname = PerfDataManager::counter_name(name_space(),140"decrementTenuringThresholdForSurvivorLimit");141_decrement_tenuring_threshold_for_survivor_limit_counter =142PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,143(jlong)0, CHECK);144cname = PerfDataManager::counter_name(name_space(),145"changeYoungGenForMinPauses");146_change_young_gen_for_min_pauses_counter =147PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,148(jlong)0, CHECK);149150cname = PerfDataManager::counter_name(name_space(),151"changeOldGenForMajPauses");152_change_old_gen_for_maj_pauses_counter =153PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,154(jlong)0, CHECK);155156cname = PerfDataManager::counter_name(name_space(),157"increaseOldGenForThroughput");158_change_old_gen_for_throughput_counter =159PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,160(jlong)0, CHECK);161162cname = PerfDataManager::counter_name(name_space(),163"increaseYoungGenForThroughput");164_change_young_gen_for_throughput_counter =165PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,166(jlong)0, CHECK);167168cname = PerfDataManager::counter_name(name_space(),169"decreaseForFootprint");170_decrease_for_footprint_counter =171PerfDataManager::create_variable(SUN_GC, cname,172PerfData::U_Events, (jlong)0, CHECK);173174cname = PerfDataManager::counter_name(name_space(), "decideAtFullGc");175_decide_at_full_gc_counter = PerfDataManager::create_variable(SUN_GC, cname,176PerfData::U_None, (jlong)0, CHECK);177178cname = PerfDataManager::counter_name(name_space(), "minorPauseYoungSlope");179_minor_pause_young_slope_counter =180PerfDataManager::create_variable(SUN_GC, cname,181PerfData::U_None, (jlong) 0, CHECK);182183cname = PerfDataManager::counter_name(name_space(), "majorCollectionSlope");184_major_collection_slope_counter =185PerfDataManager::create_variable(SUN_GC, cname,186PerfData::U_None, (jlong) 0, CHECK);187188cname = PerfDataManager::counter_name(name_space(), "minorCollectionSlope");189_minor_collection_slope_counter =190PerfDataManager::create_variable(SUN_GC, cname,191PerfData::U_None, (jlong) 0, CHECK);192}193}194195void GCAdaptivePolicyCounters::update_counters_from_policy() {196if (UsePerfData && (size_policy() != NULL)) {197update_avg_minor_pause_counter();198update_avg_minor_interval_counter();199#ifdef NOT_PRODUCT200update_minor_pause_counter();201#endif202update_minor_gc_cost_counter();203update_avg_young_live_counter();204205update_survivor_size_counters();206update_avg_survived_avg_counters();207update_avg_survived_dev_counters();208update_avg_survived_padded_avg_counters();209210update_change_old_gen_for_throughput();211update_change_young_gen_for_throughput();212update_decrease_for_footprint();213update_change_young_gen_for_min_pauses();214update_change_old_gen_for_maj_pauses();215216update_minor_pause_young_slope_counter();217update_minor_collection_slope_counter();218update_major_collection_slope_counter();219}220}221222void GCAdaptivePolicyCounters::update_counters() {223if (UsePerfData) {224update_counters_from_policy();225}226}227228229