如果这是一个无知的问题,请原谅我,我并不是一个专业的程序员,只是好奇。是否可以从正在运行的程序内部读取工作内存,例如类的实例?
我知道你可以做类似的事情println(theInstance.getClass());
,它会给你实例的内存地址(我假设就是这样)。我想知道是否可以做一些byte[]memory = theInstance.getClass().getMemory(); println(toString(memory));
我知道的事情,但只是为了说明。
如果这是一个无知的问题,请原谅我,我并不是一个专业的程序员,只是好奇。是否可以从正在运行的程序内部读取工作内存,例如类的实例?
我知道你可以做类似的事情println(theInstance.getClass());
,它会给你实例的内存地址(我假设就是这样)。我想知道是否可以做一些byte[]memory = theInstance.getClass().getMemory(); println(toString(memory));
我知道的事情,但只是为了说明。
不使用标准 Java API。sun.misc.Unsafe
但是,您可以通过(您可能需要使用反射来获取此类的实例)访问内存。当然,您也可以通过 JNI 执行此操作。
但你为什么想要?
不,打印 getClass() 的结果不会给出“内存地址”;它给出了一个类的字符串表示(类似于“class Argyle”)。
从您的问题来看,尚不清楚您对此类内容的期望是什么。如果您想了解 Java 如何表示内存中的对象,请阅读VM 规范。再说一遍,Java 虚拟机不要求对象有任何特定的内部结构。
我最近没看过这个,但如果在 Linux 上你可以 seek/read /proc/PID/mem
。