在java中获取主内存的内容

在java中获取主内存的内容,java,memory,Java,Memory,它不是特定于问题的,但是是否可以获取当前内存状态的副本,就像只获取主内存中的任何内容一样。我的意思是,我们有没有办法用java获得RAM的图像 我正在编辑我的问题。下面是我的Windows7任务管理器的屏幕截图 @peter我看到当前的内存使用率是3.27GB。所以,我可以在一些只读内存中获得全部内容,当我重新启动操作系统时,它会恢复到我停止的位置,就像我上次的内存快照一样 是的,它被称为堆转储 jmap -heap {pid} 将堆转储到文件中 您可以使用jvisualvm分析堆转储。这取

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

我正在编辑我的问题。下面是我的Windows7任务管理器的屏幕截图


@peter我看到当前的内存使用率是3.27GB。所以,我可以在一些只读内存中获得全部内容,当我重新启动操作系统时,它会恢复到我停止的位置,就像我上次的内存快照一样

是的,它被称为堆转储

jmap -heap {pid}
将堆转储到文件中


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

这取决于“主内存”的含义

jmap -heap {pid}
JRE是设计的

  • 将Java程序与其周围的操作系统隔离,反之亦然
  • 将Java对象与其他对象的实现细节隔离
使用“普通”Java,您只能看到哪些类和对象通过公共方法公开

但是,Java有它的反射API,如果您的JRE配置为允许反射API,那么您可以突破这些界限,深入研究JRE中的类和对象

在OracleHotSpot中,您可以使用Java服务性代理启动JRE——这使您可以通过API访问Java堆的更多细节。但是您仍然被限制在JRE进程声明的内存中,并分配给它的堆


另一种可能性是使用JNI编写本机库。有一些C API调用允许您浏览操作系统地址空间。您需要是root用户(或操作系统上的同等用户)才能查看其他人的地址空间。您可以编写C代码,并使用JNI从Java调用它。

是的。谢谢你把我介绍给JNI。我环顾四周,我想我会花很长时间在这件事上。