gpt4 book ai didi

java - 如何垃圾收集Java中的直接缓冲区

转载 作者:IT老高 更新时间:2023-10-28 21:14:28 25 4
gpt4 key购买 nike

我有一个内存泄漏,我已将其隔离到错误处置的直接字节缓冲区。

ByteBuffer buff = ByteBuffer.allocateDirect(7777777);

GC 收集包含这些缓冲区的对象,但不处理缓冲区本身。如果我实例化了足够多的包含缓冲区的 transient 对象,我会得到这个令人鼓舞的消息:

java.lang.OutOfMemoryError: Direct buffer memory

我一直在寻找这个问题,显然

buff.clear();

System.gc();

不工作。

最佳答案

我怀疑您的应用程序在某个地方引用了 ByteBuffer 实例,这会阻止它被垃圾收集。

直接 ByteBuffer 的缓冲内存分配在普通堆之外(这样 GC 就不会移动它!!)。但是,ByteBuffer API 没有提供显式处理/释放缓冲区的方法。所以我假设垃圾收集器会这样做......一旦它确定不再引用 ByteBuffer 对象。

关于java - 如何垃圾收集Java中的直接缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1854398/

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