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
实例?我通过Runtime
API 寻找了一些东西但却找不到任何东西.
我找到了一个名为InstrumentationFactory
.
当有人第一次请求 的实例时Instrumentation
,它会创建一个代理 JAR 文件,然后找到自己进程的 PID 并将其附加到该进程内的 JVM...调用它的agentmain(..)
,为其提供Instrumentation
感兴趣的实例。
我不确定这种方法有多可靠。接下来我要尝试的是搜索 OpenJDK 的代码以查看Instrumentation
实例的创建位置和方式。也许,在没有安全要求的情况下,有可能(通过反射)让该机制提供实例而Instrumentation
无需附加或预加载代理?
归档时间: |
|
查看次数: |
2122 次 |
最近记录: |