RFR: 8261447: MethodInvocationCounters frequently run into overflow

Lutz Schmidt lucy at openjdk.java.net
Thu Feb 11 13:30:44 UTC 2021


On Thu, 11 Feb 2021 08:28:47 GMT, Tobias Hartmann <thartmann at openjdk.org> wrote:

>> Dear community,
>> may I please request reviews for this fix, improving the usefulness of method invocation counters.
>> - aggregation counters are retyped as uint64_t, shifting the overflow probability way out (185 days in case of a 1 GHz counter update frequency).
>> - counters for individual methods are interpreted as (unsigned int), in contrast to their declaration as int. This gives us a factor of two before the counters overflow.
>> - as a special case, "compiled_invocation_counter" is retyped as long, because it has a higher update frequency than other counters.
>> - before/after sample output is attached to the bug description. 
>> 
>> Thank you!
>> Lutz
>
> src/hotspot/share/oops/method.hpp line 728:
> 
>> 726: #ifndef PRODUCT
>> 727:   static ByteSize compiled_invocation_counter_offset() { return byte_offset_of(Method, _compiled_invocation_count); }
>> 728:   static ByteSize compiled_invocation_counter_offset64() { return byte_offset_of(Method, _compiled_invocation_count64); }
> 
> `compiled_invocation_counter_offset()` looks unused.

Correct. Removed.

> src/hotspot/share/oops/method.hpp line 459:
> 
>> 457: #else
>> 458:   // for PrintMethodData in a product build
>> 459:   int      compiled_invocation_count() const    { return 0; }
> 
> `compiled_invocation_count()` looks unused.

compiled_invocation_count() was used in compare_methods() and collect_invoked_methods(). I have converted those call sites to compiled_invocation_count64().

-------------

PR: https://git.openjdk.java.net/jdk/pull/2511


More information about the hotspot-dev mailing list