IAm*_*aja 6 java memory instrumentation
我正在尝试编写一个简单的ObjectUtils类,其中包含所有对象的各种实用程序方法.我想让其中一个调用getObjectSize(Object),在那里传递一个实例化的Object,它在内存中返回Object的大小:
public class ObjectUtils {
private static volatile Instrumentation instrumentation;
public static final long getObjectSize(final Object p_oToGauge)
{
return instrumentation.getObjectSize(p_oToGauge);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,似乎为了获得一个实现的Instrumentation实例,你需要使用JRE代理和所谓的premain方法做各种奇特的事情.
是否有一种简单的方法可以访问本地JRE的Instrumentation实例?我通过RuntimeAPI 寻找了一些东西但却找不到任何东西.
我找到了一个名为InstrumentationFactory.
当有人第一次请求 的实例时Instrumentation,它会创建一个代理 JAR 文件,然后找到自己进程的 PID 并将其附加到该进程内的 JVM...调用它的agentmain(..),为其提供Instrumentation感兴趣的实例。
我不确定这种方法有多可靠。接下来我要尝试的是搜索 OpenJDK 的代码以查看Instrumentation实例的创建位置和方式。也许,在没有安全要求的情况下,有可能(通过反射)让该机制提供实例而Instrumentation无需附加或预加载代理?