Unlike in Open J9, Hotspot was allowing to instrument native methods (including the JVM's) by renaming + marking private/final until Java 13.
Here is an example ASM code in BlockHound:
https://github.com/reactor/BlockHound/blob/312fc5f30370640f69b3c1d6659f1e9eabf32738/agent/src/main/java/reactor/blockhound/NativeWrappingClassFileTransformer.java#L96
We run it before ByteBuddy, so that ByteBuddy sees the methods as non-native and applies advices to them. It also forces us to customize the DescriptionStrategy (see #713) which isn't great for performance.
It would be nice tho if this functionality is added directly to ByteBuddy, so that we can avoid running ASM code before BB.
I understand that it does not work on Open J9, plus requires -XX:+AllowRedefinitionToAddDeleteMethods flag on Hotspot 13+, so it can be an optional mode. Yet, given that the majority of Java versions are distributed between 6-8, this mode will remain helpful for at least a few years :)
Unlike in Open J9, Hotspot was allowing to instrument native methods (including the JVM's) by renaming + marking private/final until Java 13.
Here is an example ASM code in BlockHound:
https://github.com/reactor/BlockHound/blob/312fc5f30370640f69b3c1d6659f1e9eabf32738/agent/src/main/java/reactor/blockhound/NativeWrappingClassFileTransformer.java#L96
We run it before ByteBuddy, so that ByteBuddy sees the methods as non-native and applies advices to them. It also forces us to customize the
DescriptionStrategy(see #713) which isn't great for performance.It would be nice tho if this functionality is added directly to ByteBuddy, so that we can avoid running ASM code before BB.
I understand that it does not work on Open J9, plus requires
-XX:+AllowRedefinitionToAddDeleteMethodsflag on Hotspot 13+, so it can be an optional mode. Yet, given that the majority of Java versions are distributed between 6-8, this mode will remain helpful for at least a few years :)