src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp

Fri, 17 May 2013 11:57:05 +0200

author
ehelin
date
Fri, 17 May 2013 11:57:05 +0200
changeset 5159
001ec9515f84
parent 2314
f95d63e2154a
child 5192
14d3f71f831d
permissions
-rw-r--r--

8014277: Remove ObjectClosure as base class for BoolObjectClosure
Reviewed-by: brutisso, tschatzl

duke@435 1 /*
trims@1907 2 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
duke@435 22 *
duke@435 23 */
duke@435 24
stefank@2314 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP
stefank@2314 26 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP
stefank@2314 27
stefank@2314 28 #include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
stefank@2314 29 #include "gc_implementation/shared/gcAdaptivePolicyCounters.hpp"
stefank@2314 30 #include "gc_implementation/shared/gcPolicyCounters.hpp"
stefank@2314 31
duke@435 32 // PSGCAdaptivePolicyCounters is a holder class for performance counters
duke@435 33 // that track the data and decisions for the ergonomics policy for the
duke@435 34 // parallel scavenge collector.
duke@435 35
duke@435 36 class PSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters {
duke@435 37 friend class VMStructs;
duke@435 38
duke@435 39 private:
duke@435 40 // survivor space vs. tenuring threshold
duke@435 41 PerfVariable* _old_promo_size;
duke@435 42 PerfVariable* _old_eden_size;
duke@435 43 PerfVariable* _avg_promoted_avg_counter;
duke@435 44 PerfVariable* _avg_promoted_dev_counter;
duke@435 45 PerfVariable* _avg_promoted_padded_avg_counter;
duke@435 46 PerfVariable* _avg_pretenured_padded_avg;
duke@435 47
duke@435 48 // young gen vs. old gen sizing
duke@435 49 PerfVariable* _avg_major_pause;
duke@435 50 PerfVariable* _avg_major_interval;
duke@435 51 PerfVariable* _live_space;
duke@435 52 PerfVariable* _free_space;
duke@435 53 PerfVariable* _avg_base_footprint;
jmasa@1822 54 PerfVariable* _gc_overhead_limit_exceeded_counter;
jmasa@1822 55 PerfVariable* _live_at_last_full_gc_counter;
duke@435 56 PerfVariable* _old_capacity;
duke@435 57 PerfVariable* _boundary_moved;
duke@435 58
duke@435 59 PerfVariable* _change_old_gen_for_min_pauses;
duke@435 60 PerfVariable* _change_young_gen_for_maj_pauses_counter;
duke@435 61
duke@435 62 PerfVariable* _major_pause_old_slope;
duke@435 63 PerfVariable* _minor_pause_old_slope;
duke@435 64 PerfVariable* _major_pause_young_slope;
duke@435 65
duke@435 66 PerfVariable* _scavenge_skipped;
duke@435 67 PerfVariable* _full_follows_scavenge;
duke@435 68
duke@435 69 // Use this time stamp if the gc time stamp is not available.
duke@435 70 TimeStamp _counter_time_stamp;
duke@435 71
duke@435 72 protected:
duke@435 73 PSAdaptiveSizePolicy* ps_size_policy() {
duke@435 74 return (PSAdaptiveSizePolicy*)_size_policy;
duke@435 75 }
duke@435 76
duke@435 77 public:
duke@435 78 PSGCAdaptivePolicyCounters(const char* name, int collectors, int generations,
duke@435 79 PSAdaptiveSizePolicy* size_policy);
duke@435 80 inline void update_old_capacity(size_t size_in_bytes) {
duke@435 81 _old_capacity->set_value(size_in_bytes);
duke@435 82 }
duke@435 83 inline void update_old_eden_size(size_t old_size) {
duke@435 84 _old_eden_size->set_value(old_size);
duke@435 85 }
duke@435 86 inline void update_old_promo_size(size_t old_size) {
duke@435 87 _old_promo_size->set_value(old_size);
duke@435 88 }
duke@435 89 inline void update_boundary_moved(int size_in_bytes) {
duke@435 90 _boundary_moved->set_value(size_in_bytes);
duke@435 91 }
duke@435 92 inline void update_avg_promoted_avg() {
duke@435 93 _avg_promoted_avg_counter->set_value(
duke@435 94 (jlong)(ps_size_policy()->avg_promoted()->average())
duke@435 95 );
duke@435 96 }
duke@435 97 inline void update_avg_promoted_dev() {
duke@435 98 _avg_promoted_dev_counter->set_value(
duke@435 99 (jlong)(ps_size_policy()->avg_promoted()->deviation())
duke@435 100 );
duke@435 101 }
duke@435 102 inline void update_avg_promoted_padded_avg() {
duke@435 103 _avg_promoted_padded_avg_counter->set_value(
duke@435 104 (jlong)(ps_size_policy()->avg_promoted()->padded_average())
duke@435 105 );
duke@435 106 }
duke@435 107
duke@435 108 inline void update_avg_pretenured_padded_avg() {
duke@435 109 _avg_pretenured_padded_avg->set_value(
duke@435 110 (jlong)(ps_size_policy()->_avg_pretenured->padded_average())
duke@435 111 );
duke@435 112 }
duke@435 113 inline void update_change_young_gen_for_maj_pauses() {
duke@435 114 _change_young_gen_for_maj_pauses_counter->set_value(
duke@435 115 ps_size_policy()->change_young_gen_for_maj_pauses());
duke@435 116 }
duke@435 117 inline void update_change_old_gen_for_min_pauses() {
duke@435 118 _change_old_gen_for_min_pauses->set_value(
duke@435 119 ps_size_policy()->change_old_gen_for_min_pauses());
duke@435 120 }
duke@435 121
duke@435 122 // compute_generation_free_space() statistics
duke@435 123
duke@435 124 inline void update_avg_major_pause() {
duke@435 125 _avg_major_pause->set_value(
duke@435 126 (jlong)(ps_size_policy()->_avg_major_pause->average() * 1000.0)
duke@435 127 );
duke@435 128 }
duke@435 129 inline void update_avg_major_interval() {
duke@435 130 _avg_major_interval->set_value(
duke@435 131 (jlong)(ps_size_policy()->_avg_major_interval->average() * 1000.0)
duke@435 132 );
duke@435 133 }
duke@435 134
duke@435 135 inline void update_major_gc_cost_counter() {
duke@435 136 _major_gc_cost_counter->set_value(
duke@435 137 (jlong)(ps_size_policy()->major_gc_cost() * 100.0)
duke@435 138 );
duke@435 139 }
duke@435 140 inline void update_mutator_cost_counter() {
duke@435 141 _mutator_cost_counter->set_value(
duke@435 142 (jlong)(ps_size_policy()->mutator_cost() * 100.0)
duke@435 143 );
duke@435 144 }
duke@435 145
duke@435 146 inline void update_live_space() {
duke@435 147 _live_space->set_value(ps_size_policy()->live_space());
duke@435 148 }
duke@435 149 inline void update_free_space() {
duke@435 150 _free_space->set_value(ps_size_policy()->free_space());
duke@435 151 }
duke@435 152
duke@435 153 inline void update_avg_base_footprint() {
duke@435 154 _avg_base_footprint->set_value(
duke@435 155 (jlong)(ps_size_policy()->avg_base_footprint()->average())
duke@435 156 );
duke@435 157 }
duke@435 158 inline void update_avg_old_live() {
duke@435 159 _avg_old_live_counter->set_value(
duke@435 160 (jlong)(ps_size_policy()->avg_old_live()->average())
duke@435 161 );
duke@435 162 }
duke@435 163 // Scale up all the slopes
duke@435 164 inline void update_major_pause_old_slope() {
duke@435 165 _major_pause_old_slope->set_value(
duke@435 166 (jlong)(ps_size_policy()->major_pause_old_slope() * 1000)
duke@435 167 );
duke@435 168 }
duke@435 169 inline void update_minor_pause_old_slope() {
duke@435 170 _minor_pause_old_slope->set_value(
duke@435 171 (jlong)(ps_size_policy()->minor_pause_old_slope() * 1000)
duke@435 172 );
duke@435 173 }
duke@435 174 inline void update_major_pause_young_slope() {
duke@435 175 _major_pause_young_slope->set_value(
duke@435 176 (jlong)(ps_size_policy()->major_pause_young_slope() * 1000)
duke@435 177 );
duke@435 178 }
jmasa@1822 179 inline void update_gc_overhead_limit_exceeded_counter() {
jmasa@1822 180 _gc_overhead_limit_exceeded_counter->set_value(
jmasa@1822 181 (jlong) ps_size_policy()->gc_overhead_limit_exceeded());
jmasa@1822 182 }
jmasa@1822 183 inline void update_live_at_last_full_gc_counter() {
jmasa@1822 184 _live_at_last_full_gc_counter->set_value(
jmasa@1822 185 (jlong)(ps_size_policy()->live_at_last_full_gc()));
jmasa@1822 186 }
duke@435 187
duke@435 188 inline void update_scavenge_skipped(int cause) {
duke@435 189 _scavenge_skipped->set_value(cause);
duke@435 190 }
duke@435 191
duke@435 192 inline void update_full_follows_scavenge(int event) {
duke@435 193 _full_follows_scavenge->set_value(event);
duke@435 194 }
duke@435 195
duke@435 196 // Update all the counters that can be updated from the size policy.
duke@435 197 // This should be called after all policy changes have been made
duke@435 198 // and reflected internall in the size policy.
duke@435 199 void update_counters_from_policy();
duke@435 200
duke@435 201 // Update counters that can be updated from fields internal to the
duke@435 202 // counter or from globals. This is distinguished from counters
duke@435 203 // that are updated via input parameters.
duke@435 204 void update_counters();
duke@435 205
duke@435 206 virtual GCPolicyCounters::Name kind() const {
duke@435 207 return GCPolicyCounters::PSGCAdaptivePolicyCountersKind;
duke@435 208 }
duke@435 209 };
stefank@2314 210
stefank@2314 211 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP

mercurial