On Mon, 4 Jul 2022 10:06:12 GMT, Сергей Цыпанов <d...@openjdk.org> wrote:

>> A more realistic use case would be something in the lines of checking 
>> whether the method is an expected one:
>> 
>> 
>>   @Benchmark
>>   public boolean isFoo() {
>>     return matches(method, "foo", int.class, String.class);
>>   }
>>   
>>   private boolean matches(Method method, String name, Class<?> 
>> ...parameterTypes) {
>>     if (method.getName().equals(name) &&
>>         method.getParameterCount() == parameterTypes.length) {
>>       var params = method.getParameters();
>>       for (int i = 0; i < parameterTypes.length; i++) {
>>         if (params[i].getType() != parameterTypes[i]) {
>>           return false;
>>         }
>>       }
>>       return true;
>>     } else {
>>       return false;
>>     }
>>   }
>
> Without `@Stable` your benchmark yields
> 
> Benchmark                    Mode  Cnt  Score   Error  Units
> AccessParamsBenchmark.isFoo  avgt   40  1,110 ± 0,062  ns/op
> 
> and with `@Stable` it yields
> 
> Benchmark                    Mode  Cnt  Score   Error  Units
> AccessParamsBenchmark.isFoo  avgt   40  0,836 ± 0,015  ns/op
> 
> Java 18:
> 
> Benchmark                    Mode  Cnt  Score   Error  Units
> AccessParamsBenchmark.isFoo  avgt   40  6,105 ± 0,107  ns/op

So, it looks like @Stable should stay.

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

PR: https://git.openjdk.org/jdk/pull/9143

Reply via email to