< prev index next >

src/hotspot/share/oops/methodCounters.cpp

Print this page

  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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *
 23  */
 24 

 25 #include "compiler/compiler_globals.hpp"
 26 #include "compiler/compilerOracle.hpp"

 27 #include "oops/method.hpp"
 28 #include "oops/methodCounters.hpp"

 29 #include "runtime/handles.inline.hpp"

 30 
 31 MethodCounters::MethodCounters(const methodHandle& mh) :


 32   _prev_time(0),
 33   _rate(0),
 34   _highest_comp_level(0),
 35   _highest_osr_comp_level(0)
 36 {
 37   set_interpreter_throwout_count(0);
 38   JVMTI_ONLY(clear_number_of_breakpoints());
 39   invocation_counter()->init();
 40   backedge_counter()->init();
 41 
 42   // Set per-method thresholds.
 43   double scale = 1.0;
 44   CompilerOracle::has_option_value(mh, CompileCommandEnum::CompileThresholdScaling, scale);
 45 
 46   _invoke_mask = right_n_bits(CompilerConfig::scaled_freq_log(Tier0InvokeNotifyFreqLog, scale)) << InvocationCounter::count_shift;
 47   _backedge_mask = right_n_bits(CompilerConfig::scaled_freq_log(Tier0BackedgeNotifyFreqLog, scale)) << InvocationCounter::count_shift;
 48 }
 49 




 50 MethodCounters* MethodCounters::allocate_no_exception(const methodHandle& mh) {
 51   ClassLoaderData* loader_data = mh->method_holder()->class_loader_data();
 52   return new(loader_data, size(), MetaspaceObj::MethodCountersType) MethodCounters(mh);
 53 }
 54 
 55 MethodCounters* MethodCounters::allocate_with_exception(const methodHandle& mh, TRAPS) {
 56   ClassLoaderData* loader_data = mh->method_holder()->class_loader_data();
 57   return new(loader_data, size(), MetaspaceObj::MethodCountersType, THREAD) MethodCounters(mh);
 58 }
 59 
 60 void MethodCounters::clear_counters() {
 61   invocation_counter()->reset();
 62   backedge_counter()->reset();
 63   set_interpreter_throwout_count(0);
 64   set_prev_time(0);
 65   set_prev_event_count(0);
 66   set_rate(0);
 67   set_highest_comp_level(0);
 68   set_highest_osr_comp_level(0);
 69 }
 70 







































 71 void MethodCounters::print_value_on(outputStream* st) const {

 72   st->print("method counters");
 73   print_address_on(st);
 74 }
 75 
 76 

  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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *
 23  */
 24 
 25 #include "cds/cdsConfig.hpp"
 26 #include "compiler/compiler_globals.hpp"
 27 #include "compiler/compilerOracle.hpp"
 28 #include "memory/metaspaceClosure.hpp"
 29 #include "oops/method.hpp"
 30 #include "oops/methodCounters.hpp"
 31 #include "oops/trainingData.hpp"
 32 #include "runtime/handles.inline.hpp"
 33 #include "memory/resourceArea.hpp"
 34 
 35 MethodCounters::MethodCounters(const methodHandle& mh) :
 36   _method(mh()),
 37   _method_training_data(method_training_data_sentinel()),
 38   _prev_time(0),
 39   _rate(0),
 40   _highest_comp_level(0),
 41   _highest_osr_comp_level(0)
 42 {
 43   set_interpreter_throwout_count(0);
 44   JVMTI_ONLY(clear_number_of_breakpoints());
 45   invocation_counter()->init();
 46   backedge_counter()->init();
 47 
 48   // Set per-method thresholds.
 49   double scale = 1.0;
 50   CompilerOracle::has_option_value(mh, CompileCommandEnum::CompileThresholdScaling, scale);
 51 
 52   _invoke_mask = right_n_bits(CompilerConfig::scaled_freq_log(Tier0InvokeNotifyFreqLog, scale)) << InvocationCounter::count_shift;
 53   _backedge_mask = right_n_bits(CompilerConfig::scaled_freq_log(Tier0BackedgeNotifyFreqLog, scale)) << InvocationCounter::count_shift;
 54 }
 55 
 56 MethodCounters::MethodCounters() {
 57   assert(CDSConfig::is_dumping_static_archive() || UseSharedSpaces, "only for CDS");
 58 }
 59 
 60 MethodCounters* MethodCounters::allocate_no_exception(const methodHandle& mh) {
 61   ClassLoaderData* loader_data = mh->method_holder()->class_loader_data();
 62   return new(loader_data, method_counters_size(), MetaspaceObj::MethodCountersType) MethodCounters(mh);
 63 }
 64 
 65 MethodCounters* MethodCounters::allocate_with_exception(const methodHandle& mh, TRAPS) {
 66   ClassLoaderData* loader_data = mh->method_holder()->class_loader_data();
 67   return new(loader_data, method_counters_size(), MetaspaceObj::MethodCountersType, THREAD) MethodCounters(mh);
 68 }
 69 
 70 void MethodCounters::clear_counters() {
 71   invocation_counter()->reset();
 72   backedge_counter()->reset();
 73   set_interpreter_throwout_count(0);
 74   set_prev_time(0);
 75   set_prev_event_count(0);
 76   set_rate(0);
 77   set_highest_comp_level(0);
 78   set_highest_osr_comp_level(0);
 79 }
 80 
 81 void MethodCounters::metaspace_pointers_do(MetaspaceClosure* it) {
 82   log_trace(cds)("Iter(MethodCounters): %p", this);
 83   it->push(&_method);
 84   it->push(&_method_training_data);
 85 }
 86 
 87 #if INCLUDE_CDS
 88 void MethodCounters::remove_unshareable_info() {
 89 }
 90 void MethodCounters::restore_unshareable_info(TRAPS) {
 91   _method_training_data = method_training_data_sentinel();
 92 }
 93 #endif // INCLUDE_CDS
 94 
 95 void MethodCounters::print_on(outputStream* st) const {
 96   assert(is_methodCounters(), "should be method counters");
 97   st->print("method counters");
 98   print_data_on(st);
 99 }
100 
101 void MethodCounters::print_data_on(outputStream* st) const {
102   ResourceMark rm;
103   st->print_cr("  - invocation_counter: %d carry=%d", _invocation_counter.count(), _invocation_counter.carry());
104   st->print_cr("  - backedge_counter: %d carry=%d",   _backedge_counter.count(), _backedge_counter.carry());
105   st->print_cr("  - prev_time: " JLONG_FORMAT,        _prev_time);
106   st->print_cr("  - rate: %.3f",             _rate);
107   st->print_cr("  - invoke_mask: %d",        _invoke_mask);
108   st->print_cr("  - backedge_mask: %d",      _backedge_mask);
109   st->print_cr("  - prev_event_count: %d",   _prev_event_count);
110 #if COMPILER2_OR_JVMCI
111   st->print_cr("  - interpreter_throwout_count: %u", _interpreter_throwout_count);
112 #endif
113 #if INCLUDE_JVMTI
114   st->print_cr("  - number_of_breakpoints: %u", _number_of_breakpoints);
115 #endif
116   st->print_cr("  - highest_comp_level: %u", _highest_comp_level);
117   st->print_cr("  - highest_osr_comp_level: %u", _highest_osr_comp_level);
118 }
119 
120 void MethodCounters::print_value_on(outputStream* st) const {
121   assert(is_methodCounters(), "must be methodCounters");
122   st->print("method counters");
123   print_address_on(st);
124 }
125 
126 
< prev index next >