fast way to infer caller
Remi Forax
forax at univ-mlv.fr
Thu Apr 7 12:32:39 UTC 2022
----- Original Message -----
> From: "Kasper Nielsen" <kasperni at gmail.com>
> To: "Ceki Gülcü" <ceki at qos.ch>
> Cc: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> Sent: Thursday, April 7, 2022 1:53:33 PM
> Subject: Re: fast way to infer caller
>>
>> MethodHandles.lookup().lookupClass() looks very promising except that
>> there is no way to specify the depth.
>>
>> I am looking for a method to obtain the Nth caller at a cost of around
>> 100 to 200 nanoseconds of CPU time. Do you think the JDK could cater
>> for this use case?
>>
>
> Hi Ceki,
>
> I don't think you will find the numbers you are looking for with
> StackWalker.
> Compared to something like Reflection.getCallerClass() which
> MethodHandles.lookup() uses.
> There is still a very large (>100x) performance gap between the two.
>
> public class StackWalkerPerf {
>
> static final StackWalker sw =
> StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE);
>
> @Benchmark
> public Class<?> stackWalkerCallerClass() {
> return sw.getCallerClass();
> }
>
> @Benchmark
> public Class<?> reflectionCallerClass() {
> return MethodHandles.lookup().lookupClass();
> }
> }
>
> Benchmark Mode Cnt Score Error Units
> StackWalkerPerf.reflectionCallerClass avgt 10 2,927 ± 0,012 ns/op
> StackWalkerPerf.stackWalkerCallerClass avgt 10 915,287 ± 9,565 ns/op
The resulting class is not the same, so comparing the performance of two codes that does not do the same thing is dubious, no ?
>
> /Kasper
Rémi
More information about the core-libs-dev
mailing list