Java 访问正在运行的JVM原始内存
如果这是一个无知的问题,请原谅,我并不是一个专业的程序员,只是好奇而已。是否可以从正在运行的程序中读取工作内存(例如类的实例)Java 访问正在运行的JVM原始内存,java,jvm,memory-dump,Java,Jvm,Memory Dump,如果这是一个无知的问题,请原谅,我并不是一个专业的程序员,只是好奇而已。是否可以从正在运行的程序中读取工作内存(例如类的实例) 我知道您可以执行类似于println(instance.getClass())的操作,它将为您提供实例的内存地址(我假设它是这样的)。我想知道是否可以做类似于byte[]memory=instance.getClass().getMemory()的事情;println(toString(内存))我知道这些都是虚构的,只是为了举例说明。不,打印getClass()的结果不
我知道您可以执行类似于
println(instance.getClass())的操作代码>,它将为您提供实例的内存地址(我假设它是这样的)。我想知道是否可以做类似于byte[]memory=instance.getClass().getMemory()的事情;println(toString(内存))代码>我知道这些都是虚构的,只是为了举例说明。不,打印getClass()的结果不会给出“内存地址”;它给出了一个类的字符串表示形式(类似于“CLASSARGYLE”)
从你的问题来看,还不清楚你期望这样一件事的内容是什么。如果您想了解Java如何表示内存中的对象,请阅读。然后再次强调,.否,打印getClass()的结果不会给出“内存地址”;它给出了一个类的字符串表示形式(类似于“CLASSARGYLE”)
从你的问题来看,还不清楚你期望这样一件事的内容是什么。如果您想了解Java如何表示内存中的对象,请阅读。再次强调,.不使用标准Java API。但是,您可以通过sun.misc.Unsafe
访问内存(您可能需要使用反射来获取此类的实例)。当然,您也可以通过JNI来实现这一点
但是为什么要这样做呢?不使用标准Java API。但是,您可以通过sun.misc.Unsafe
访问内存(您可能需要使用反射来获取此类的实例)。当然,您也可以通过JNI来实现这一点
但是你为什么要这么做呢?我最近没有看过这个,但是如果在Linux上你可以查找/读取/proc/PID/mem
我最近没有看过这个,但是如果在Linux上你可以查找/读取/proc/PID/mem
这是可能的。但我认为这对你没什么好处。这将是虚拟内存地址。因此,它只与JVM内部相关——实际上是该进程。地址不太有用的原因是,当执行gc时,对象可以移动。基本上,您不需要知道Java中的这一级别的信息。感谢您的回复。我想我没有任何具体的用途,只是想知道这是否可能。我刚刚意识到我在考虑打印一个数组。当我在一个包含类实例的数组上执行println()时,我会在@like so:[0]sketch_dec03a之后得到一个地址$MyClass@141fab6这是从Processing(Processing.org)获得的,通过这种方式我获得了所有的Java体验。但我认为这对你没什么好处。这将是虚拟内存地址。因此,它只与JVM内部相关——实际上是该进程。地址不太有用的原因是,当执行gc时,对象可以移动。基本上,您不需要知道Java中的这一级别的信息。感谢您的回复。我想我没有任何具体的用途,只是想知道这是否可能。我刚刚意识到我在考虑打印一个数组。当我在一个包含类实例的数组上执行println()时,我会在@like so:[0]sketch_dec03a之后得到一个地址$MyClass@141fab6这是从Processing(Processing.org)获得的,通过这种方式,我获得了所有Java经验。@Tom-实际上,我不认为JNI允许您获得原始内存本身。相反,它提供了获取和设置(例如)对象字段的方法。(如果您知道JNI字段ID的内部表示是什么,也许您可以“冲破”抽象障碍…@Tom-实际上,我不认为JNI允许您获取原始内存本身。相反,它提供了获取和设置(例如)对象字段的方法。(如果您知道JNI字段ID的内部表示是什么,也许您可以“冲破”抽象障碍…)