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

Thu, 22 Sep 2011 10:57:37 -0700

author
johnc
date
Thu, 22 Sep 2011 10:57:37 -0700
changeset 3175
4dfb2df418f2
parent 2314
f95d63e2154a
child 5192
14d3f71f831d
permissions
-rw-r--r--

6484982: G1: process references during evacuation pauses
Summary: G1 now uses two reference processors - one is used by concurrent marking and the other is used by STW GCs (both full and incremental evacuation pauses). In an evacuation pause, the reference processor is embedded into the closures used to scan objects. Doing so causes causes reference objects to be 'discovered' by the reference processor. At the end of the evacuation pause, these discovered reference objects are processed - preserving (and copying) referent objects (and their reachable graphs) as appropriate.
Reviewed-by: ysr, jwilhelm, brutisso, stefank, tonyp

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