它没有特定的问题,但可以获得当前内存状态的副本,就像在主内存中获取任何内容一样。我的意思是我们有什么方法可以在java中获得RAM的图像。
我正在编辑我的问题。这是我的Windows 7任务管理器的屏幕截图。
@peter我看到当前的内存使用量是3.27GB。所以,我可以在一些只读内存中获取整个内容吗?当我重新启动操作系统时,它会从我离开的地方恢复,就像我上一次的内存快照一样。
答案 0 :(得分:2)
是的,它被称为堆转储。
jmap -heap {pid}
将堆转储到文件中。
您可以使用jvisualvm
来分析堆转储。
答案 1 :(得分:1)
这取决于你的意思"主记忆"。
JRE的设计
"普通" Java,您只能通过公共方法查看哪些类和对象公开。
但是,Java有它的Reflection API,如果你的JRE被配置为允许它,你可以突破这些边界,并深入研究JRE中的类和对象。
在Oracle HotSpot中,您可以使用Java Servicability Agent启动JRE - http://openjdk.java.net/groups/hotspot/docs/Serviceability.html - 这使您可以通过API访问Java堆的更多详细信息。但是你仍然只限于JRE进程声明的内存,并分配给它的堆。
另一种可能性是使用JNI编写本机库。有一些C API调用允许您浏览OS地址空间。你需要是root(或你的操作系统上的等价物)才能看到其他人的地址空间。您可以编写C代码,使用JNI从Java调用它。