Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp
38921 views
/*1* Copyright (c) 2003, 2010, 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_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp"26#include "memory/resourceArea.hpp"27#include "runtime/arguments.hpp"28293031PSGCAdaptivePolicyCounters::PSGCAdaptivePolicyCounters(const char* name_arg,32int collectors,33int generations,34PSAdaptiveSizePolicy* size_policy_arg)35: GCAdaptivePolicyCounters(name_arg,36collectors,37generations,38size_policy_arg) {39if (UsePerfData) {40EXCEPTION_MARK;41ResourceMark rm;4243const char* cname;4445cname = PerfDataManager::counter_name(name_space(), "oldPromoSize");46_old_promo_size = PerfDataManager::create_variable(SUN_GC, cname,47PerfData::U_Bytes, ps_size_policy()->calculated_promo_size_in_bytes(), CHECK);4849cname = PerfDataManager::counter_name(name_space(), "oldEdenSize");50_old_eden_size = PerfDataManager::create_variable(SUN_GC, cname,51PerfData::U_Bytes, ps_size_policy()->calculated_eden_size_in_bytes(), CHECK);5253cname = PerfDataManager::counter_name(name_space(), "oldCapacity");54_old_capacity = PerfDataManager::create_variable(SUN_GC, cname,55PerfData::U_Bytes, (jlong) InitialHeapSize, CHECK);5657cname = PerfDataManager::counter_name(name_space(), "boundaryMoved");58_boundary_moved = PerfDataManager::create_variable(SUN_GC, cname,59PerfData::U_Bytes, (jlong) 0, CHECK);6061cname = PerfDataManager::counter_name(name_space(), "avgPromotedAvg");62_avg_promoted_avg_counter =63PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,64ps_size_policy()->calculated_promo_size_in_bytes(), CHECK);6566cname = PerfDataManager::counter_name(name_space(), "avgPromotedDev");67_avg_promoted_dev_counter =68PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,69(jlong) 0 , CHECK);7071cname = PerfDataManager::counter_name(name_space(), "avgPromotedPaddedAvg");72_avg_promoted_padded_avg_counter =73PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,74ps_size_policy()->calculated_promo_size_in_bytes(), CHECK);7576cname = PerfDataManager::counter_name(name_space(),77"avgPretenuredPaddedAvg");78_avg_pretenured_padded_avg =79PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,80(jlong) 0, CHECK);818283cname = PerfDataManager::counter_name(name_space(),84"changeYoungGenForMajPauses");85_change_young_gen_for_maj_pauses_counter =86PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,87(jlong)0, CHECK);8889cname = PerfDataManager::counter_name(name_space(),90"changeOldGenForMinPauses");91_change_old_gen_for_min_pauses =92PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,93(jlong)0, CHECK);949596cname = PerfDataManager::counter_name(name_space(), "avgMajorPauseTime");97_avg_major_pause = PerfDataManager::create_variable(SUN_GC, cname,98PerfData::U_Ticks, (jlong) ps_size_policy()->_avg_major_pause->average(), CHECK);99100cname = PerfDataManager::counter_name(name_space(), "avgMajorIntervalTime");101_avg_major_interval = PerfDataManager::create_variable(SUN_GC, cname,102PerfData::U_Ticks, (jlong) ps_size_policy()->_avg_major_interval->average(), CHECK);103104cname = PerfDataManager::counter_name(name_space(), "majorGcCost");105_major_gc_cost_counter = PerfDataManager::create_variable(SUN_GC, cname,106PerfData::U_Ticks, (jlong) ps_size_policy()->major_gc_cost(), CHECK);107108cname = PerfDataManager::counter_name(name_space(), "liveSpace");109_live_space = PerfDataManager::create_variable(SUN_GC, cname,110PerfData::U_Bytes, ps_size_policy()->live_space(), CHECK);111112cname = PerfDataManager::counter_name(name_space(), "freeSpace");113_free_space = PerfDataManager::create_variable(SUN_GC, cname,114PerfData::U_Bytes, ps_size_policy()->free_space(), CHECK);115116cname = PerfDataManager::counter_name(name_space(), "avgBaseFootprint");117_avg_base_footprint = PerfDataManager::create_variable(SUN_GC, cname,118PerfData::U_Bytes, (jlong) ps_size_policy()->avg_base_footprint()->average(), CHECK);119120cname = PerfDataManager::counter_name(name_space(), "gcTimeLimitExceeded");121_gc_overhead_limit_exceeded_counter =122PerfDataManager::create_variable(SUN_GC, cname,123PerfData::U_Events, ps_size_policy()->gc_overhead_limit_exceeded(), CHECK);124125cname = PerfDataManager::counter_name(name_space(), "liveAtLastFullGc");126_live_at_last_full_gc_counter =127PerfDataManager::create_variable(SUN_GC, cname,128PerfData::U_Bytes, ps_size_policy()->live_at_last_full_gc(), CHECK);129130cname = PerfDataManager::counter_name(name_space(), "majorPauseOldSlope");131_major_pause_old_slope = PerfDataManager::create_variable(SUN_GC, cname,132PerfData::U_None, (jlong) 0, CHECK);133134cname = PerfDataManager::counter_name(name_space(), "minorPauseOldSlope");135_minor_pause_old_slope = PerfDataManager::create_variable(SUN_GC, cname,136PerfData::U_None, (jlong) 0, CHECK);137138cname = PerfDataManager::counter_name(name_space(), "majorPauseYoungSlope");139_major_pause_young_slope = PerfDataManager::create_variable(SUN_GC, cname,140PerfData::U_None, (jlong) 0, CHECK);141142cname = PerfDataManager::counter_name(name_space(), "scavengeSkipped");143_scavenge_skipped = PerfDataManager::create_variable(SUN_GC, cname,144PerfData::U_Bytes, (jlong) 0, CHECK);145146cname = PerfDataManager::counter_name(name_space(), "fullFollowsScavenge");147_full_follows_scavenge = PerfDataManager::create_variable(SUN_GC, cname,148PerfData::U_Bytes, (jlong) 0, CHECK);149150_counter_time_stamp.update();151}152153assert(size_policy()->is_gc_ps_adaptive_size_policy(),154"Wrong type of size policy");155}156157void PSGCAdaptivePolicyCounters::update_counters_from_policy() {158if (UsePerfData) {159GCAdaptivePolicyCounters::update_counters_from_policy();160update_eden_size();161update_promo_size();162update_avg_old_live();163update_survivor_size_counters();164update_avg_promoted_avg();165update_avg_promoted_dev();166update_avg_promoted_padded_avg();167update_avg_pretenured_padded_avg();168169update_avg_major_pause();170update_avg_major_interval();171update_minor_gc_cost_counter();172update_major_gc_cost_counter();173update_mutator_cost_counter();174update_decrement_tenuring_threshold_for_gc_cost();175update_increment_tenuring_threshold_for_gc_cost();176update_decrement_tenuring_threshold_for_survivor_limit();177update_live_space();178update_free_space();179update_avg_base_footprint();180181update_change_old_gen_for_maj_pauses();182update_change_young_gen_for_maj_pauses();183update_change_old_gen_for_min_pauses();184185update_change_old_gen_for_throughput();186update_change_young_gen_for_throughput();187188update_decrease_for_footprint();189update_decide_at_full_gc_counter();190191update_major_pause_old_slope();192update_minor_pause_old_slope();193update_major_pause_young_slope();194update_minor_collection_slope_counter();195update_gc_overhead_limit_exceeded_counter();196update_live_at_last_full_gc_counter();197}198}199200void PSGCAdaptivePolicyCounters::update_counters() {201if (UsePerfData) {202update_counters_from_policy();203}204}205206207