gpt4 book ai didi

java - Java GC 如何清理直接字节缓冲区,因为 IBM 文档说,确实如此。

转载 作者:搜寻专家 更新时间:2023-11-01 02:21:32 24 4
gpt4 key购买 nike

我假设,我了解 Bytebuffer 和 DirectByteBuffer 的不同之处,直到我阅读了一篇关于 IBM 文档的文章,提到:

“Direct ByteBuffer 对象会自动清理其 native 缓冲区,但只能作为 Java 堆 GC 的一部分这样做”

https://www.ibm.com/developerworks/library/j-nativememory-linux/

现在我无法理解这一行,因为它说 DirectByteBuffer 将清理作为 Java 堆 GC 的一部分。

IFAIK,Java 堆 GC 仅在 Java 堆中进行清理(未分配 DirectByteBuffer 的地方)。它 (GC) 不知道 native 内存(分配 DirectByteBuffer 的地方)。

请帮助我理解这一行,或者我的理解是否有差距

最佳答案

当您创建 java.nio.DirectByteBuffer 的实例时,您基本上有 2 个部分:

  • java.nio.DirectByteBuffer 类型的普通 java 对象,分配在堆上
  • 您想要的实际字节缓冲区,由上述 java 对象的构造函数在堆外分配

此外,java.nio.DirectByteBuffer的构造函数注册了一个java.nio.DirectByteBuffer.Deallocator类型的runnable,它是一个私有(private)静态类。当 GC 清理此 java.nio.DirectByteBuffer 实例时执行此 runnable。释放 native 字节缓冲区是此 Deallocator 的任务。实时文件系统! :)

关于java - Java GC 如何清理直接字节缓冲区,因为 IBM 文档说,确实如此。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40122063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com