java - 我们是否必须手动释放分配的 ByteBuffer?

标签 java lwjgl nio

我正在写一些使用 ByteBuffer 的东西s。在 docs of the API它说

There is no way to free a buffer explicitly (without JVM specific reflection). Buffer objects are subject to GC and it usually takes two GC cycles to free the off-heap memory after the buffer object becomes unreachable.



然而在 SO post's accepted answer我读

BigMemory uses the memory address space of the JVM process, via direct ByteBuffers that are not subject to GC unlike other native Java objects.



现在我该怎么办,我应该释放创建的缓冲区吗?还是我误解了文档或答案中的某些内容?

最佳答案

这取决于您如何创建缓冲区,有许多可能的用例。普通 ByteBuffer.allocate()将在堆上创建并由 GC 收集。其他选项,例如 native 内存可能不会。

Terracotta BigMemory 是一种不受 JVM GC 控制的原生堆外内存。如果在这种类型的内存中分配缓冲区,则必须自己清除它。

即使缓冲区已分配在堆内存中,清除缓冲区也可能是一个好主意。 GC 将负责收集未使用的缓冲区,但这需要一些时间。

关于java - 我们是否必须手动释放分配的 ByteBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55417923/

相关文章:

Java PDF 操作,基于模式匹配替换文本,带有超链接

java - LWJGL 的 Assimp 教程

java - 将鼠标监听器添加到 Canvas 上,并在其上显示 lwjgl

java - 具有透明背景的 LWJGL 窗口?

Java NIO SocketChannel 读取预定义字节数

java - 我如何分析 Java 中的线程?

c# - itextsharp pdfpcell header

java - Android:DateFormat.getBestDateTimePattern API 级别 < 18 替换

java - 在 unix 上使用 NIO 时未设置写入权限

java - 访问名称编码未知的文件