如何在Java中获取插装实例
我试图编写一个简单的如何在Java中获取插装实例,java,memory,instrumentation,Java,Memory,Instrumentation,我试图编写一个简单的ObjectUtils类,它包含用于所有对象的各种实用方法。我想让其中一个名为getObjectSize(Object)的函数传递一个实例化的对象,并在内存中返回对象的大小: public class ObjectUtils { private static volatile Instrumentation instrumentation; public static final long getObjectSize(final Object p_oToGa
ObjectUtils
类,它包含用于所有对象的各种实用方法。我想让其中一个名为getObjectSize(Object)
的函数传递一个实例化的对象,并在内存中返回对象的大小:
public class ObjectUtils {
private static volatile Instrumentation instrumentation;
public static final long getObjectSize(final Object p_oToGauge)
{
return instrumentation.getObjectSize(p_oToGauge);
}
}
然而,似乎为了获得一个实现的指令插入
实例,您需要使用JRE代理和所谓的premain
方法来完成各种各样的工作
有没有一种简单的方法可以访问本地JRE的插装
实例?我通过运行时API查找了一些东西,但什么也找不到。我找到了一个名为的类
第一次有人请求指令插入的实例时,它会创建一个代理JAR文件,然后找到自己进程的PID并将其附加到该进程中的JVM。。。它调用它的agentmain(..)
,为它提供了感兴趣的指令插入
实例
我不确定这种方法有多可靠。我接下来要尝试的是搜索OpenJDK的代码,以查看插装
实例的创建位置和方式。也许,在没有安全要求的情况下,可以(通过反射)让该机制提供检测实例,而不必附加或预加载代理?我认为没有。你将不得不做一些花哨的事情。我从Alex Snaps那里找到了这篇文章,你可能会觉得有用: