【发布时间】:2016-07-04 19:26:17
【问题描述】:
既然已经用jvm heap & gc了,什么时候发布呢?或者,它会一直保留到进程终止?
我已经检查过了:
- how to garbage collect a direct buffer java
- Deallocating Direct Buffer Native Memory in Java for JOGL
- ByteBuffer.allocate() vs. ByteBuffer.allocateDirect()
但是所有的答案都是模糊的,没有一个明确的回答,有明确的答案吗?至少对于 64 位 Linux 上的 Java 8。
【问题讨论】:
-
当
ByteBuffer被垃圾回收时,终结器将执行并释放任何底层内存分配。 -
由于你不能保证它会被释放,我建议你自己处理它,我从JM3中为我的项目剥离了
BufferUtils类,比如@987654325 @,直到现在它完美无缺 -
@elect 是的,有些书还说它适用于大而长的缓冲区,因此分配延迟的影响较小。对于小而短暂的缓冲区,建议不要使用
direct buffer,而是使用indirect buffer。 -
如果资源将被 OpenGL 使用,缓冲区必须是间接的。如果你传递一个间接的,jogl 必须在下面创建直接的。如果是你创造的,那就更好了,这样你就可以跟踪它。
-
@elect 好的,我会记住这种情况的存在。
标签: java nio bytebuffer direct-buffer