Java中有没有像GC.AddMemoryPressure method in .NET这样告诉运行时非托管内存分配的特性
发布于 2011-09-06 20:46:29
我猜这在Java中不是必需的。“如果一个小的托管对象分配了大量的非托管内存”在Java中根本不会发生,如果您通过JNI调用本机(非托管)函数,则不会将内存分配给JVM的托管内存表。
供参考:
发布于 2011-09-06 21:41:05
在Java中,直接内存是单独管理的,可以认为是“非托管”的。在Sun/Oracle JVM中,它有自己的内存使用限制,您可以同时达到堆大小和直接内存大小的限制。
在Sun/Oracle JVM中,您可以使用内部API显式地释放直接内存块。你很少需要这样做,但下面是如何做的
ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024);
((DirectBuffer) bb).cleaner().clean();您可以在不触发GC的情况下执行此操作一万次。
顺便说一句:内存映射文件使用少量的堆,不计入直接内存限制。您可以映射的数量实际上是无限的。(尽管在一个MappedByteBuffer中限制为2 2GB )
https://stackoverflow.com/questions/7320093
复制相似问题