我正在尝试编写一个简单的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);
}
}
但是,似乎为了获得实现的Instrumentation
实例,您需要使用JRE代理和所谓的premain
方法执行各种奇特的操作。
是否有一种简单的方法可以访问本地JRE的Instrumentation
个实例?我通过Runtime
API查找了一些内容但却找不到任何内容。
答案 0 :(得分:0)
我找到了一个名为InstrumentationFactory
的课程。
当有人第一次请求Instrumentation
的实例时,它会创建一个代理JAR文件,然后找到自己进程的PID并将其附加到其中的JVM ...其中调用它{{1给它感兴趣的agentmain(..)
实例。
我不确定这种方法有多可靠。接下来我要尝试的是搜索OpenJDK的代码,看看Instrumentation
实例的创建位置和方式。也许,在没有安全要求的情况下,可以(通过反射)使该机制提供Instrumentation
实例而无需附加或预加载代理?