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

Mon, 01 Dec 2008 23:25:24 -0800

author
ysr
date
Mon, 01 Dec 2008 23:25:24 -0800
changeset 892
27a80744a83b
parent 435
a61af66fc99e
child 1822
0bfd3fb24150
permissions
-rw-r--r--

6778647: snap(), snap_policy() should be renamed setup(), setup_policy()
Summary: Renamed Reference{Policy,Pocessor} methods from snap{,_policy}() to setup{,_policy}()
Reviewed-by: apetrusenko

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

mercurial