告诉JVM使用了多少本机内存

时间:2012-10-06 15:50:35

标签: java jvm java-native-interface out-of-memory

我的问题与Java-Native-Code-Background

密切相关
  

您无法很好地从Java控制本机内存。你可能有   听说过原生缓冲区,但他们没有告诉你的是那个   Java没有正确地垃圾原生缓冲区。问题是Java   不考虑原生缓冲区的大小,这意味着   它会在某些时候释放本机缓冲区,但如果你真的那么   其中许多,那么它可能不会在你的内存耗尽之前。   这意味着所有数据都必须存储在Java对象中。

因此,是否可以以某种方式告诉或注册所使用的本机内存量,以告诉JVM它应该运行GC? 如果我理解正确,那么Dalvik does this,但在所有JVM上有一个可靠的方法,这将是很好的。

谢谢!

1 个答案:

答案 0 :(得分:2)

您无法告诉JVM使用了多少本机内存,JVM根本没有任何接口。但是如果你因为JVM没有注意到你使用了多少而根本不想耗尽内存,我可以想到两种方法:

  1. 只要您认为JVM应该执行,就强制使用java.lang.System.gc()运行GC。 Smarter people than me are suggesting it.不要忘记GC会影响JVM的性能。
  2. 为应用程序的峰值总使用量分配一个大的直接缓冲区,使其保持持久性并对其进行自己的内存管理。 This is suggested by the NIO doc itself,因为直接缓冲的de / alloc成本较高。重复使用它。在大缓冲区的偏移处读取和写入部分ByteBuffers。