如何在Java中获取Instrumentation实例

时间:2012-05-21 20:44:45

标签: 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);
    }
}

但是,似乎为了获得实现的Instrumentation实例,您需要使用JRE代理和所谓的premain方法执行各种奇特的操作。

是否有一种简单的方法可以访问本地JRE的Instrumentation个实例?我通过Runtime API查找了一些内容但却找不到任何内容。

1 个答案:

答案 0 :(得分:0)

我找到了一个名为InstrumentationFactory的课程。

当有人第一次请求Instrumentation的实例时,它会创建一个代理JAR文件,然后找到自己进程的PID并将其附加到其中的JVM ...其中调用它{{1给它感兴趣的agentmain(..)实例。

我不确定这种方法有多可靠。接下来我要尝试的是搜索OpenJDK的代码,看看Instrumentation实例的创建位置和方式。也许,在没有安全要求的情况下,可以(通过反射)使该机制提供Instrumentation实例而无需附加或预加载代理?