1

我的问题与Java-Native-Code-Background密切相关:

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

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

谢谢!

4

1 回答 1

2

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

  1. java.lang.System.gc()每当您认为 JVM 应该这样做时,强制运行 GC 。比我聪明的人建议这样做。不要忘记 GC 会影响 JVM 性能。
  2. 分配一个足够大的直接缓冲区来满足应用程序的峰值总使用量,使其持久化并对其进行自己的内存管理。这是 NIO 文档本身建议的,因为直接缓冲区的 de/alloc 成本较高。重复使用它。在大缓冲区的偏移量处读取和写入部分 ByteBuffer。
于 2012-10-07T19:46:41.617 回答