在java中获取主内存的内容

时间:2016-05-03 14:56:38

标签: java memory

它没有特定的问题,但可以获得当前内存状态的副本,就像在主内存中获取任何内容一样。我的意思是我们有什么方法可以在java中获得RAM的图像。

我正在编辑我的问题。这是我的Windows 7任务管理器的屏幕截图。

enter image description here

@peter我看到当前的内存使用量是3.27GB。所以,我可以在一些只读内存中获取整个内容吗?当我重新启动操作系统时,它会从我离开的地方恢复,就像我上一次的内存快照一样。

2 个答案:

答案 0 :(得分:2)

是的,它被称为堆转储。

jmap -heap {pid}

将堆转储到文件中。

您可以使用jvisualvm来分析堆转储。

答案 1 :(得分:1)

这取决于你的意思"主记忆"。

JRE的设计

  • 将Java程序与其周围的操作系统隔离开来,反之亦然。
  • 将Java对象与其他对象的实现细节隔离开来

"普通" 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调用它。