java内存压力

时间:2011-09-06 12:41:31

标签: java memory garbage-collection unmanaged-memory

Java中是否有功能告诉运行时有关非GC.AddMemoryPressure method in .NET的非托管内存分配?

2 个答案:

答案 0 :(得分:2)

我想这在Java中不是必需的。 '如果一个小的托管对象分配大量的非托管内存'根本不会发生在Java中,如果通过JNI调用本机(非托管)函数,则内存不会分配给JVM的托管内存表。

供参考:

答案 1 :(得分:2)

直接内存在Java中单独管理,可以被视为“非托管”。在Sun / Oracle JVM中,它有自己的内存使用限制,您可以立即达到堆大小和直接内存大小的限制。

在Sun / Oracle JVM中,您可以使用内部API显式释放直接内存块。您甚至不需要这样做,但这是如何

ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024);

((DirectBuffer) bb).cleaner().clean();

您可以在不触发GC的情况下执行此操作一次。

BTW:内存映射文件使用少量堆,不计入直接内存限制。您可以映射的金额实际上是无限的。 (虽然在一个MappedByteBuffer中限制为2GB)