Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获取插装实例_Java_Memory_Instrumentation - Fatal编程技术网

如何在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那里找到了这篇文章,你可能会觉得有用: