gpt4 book ai didi

java - 是什么阻碍了我的 ByteBuffer 释放?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:54 25 4
gpt4 key购买 nike

我正在分配大量字节缓冲区。在完成它们之后,我将所有引用设置为 null。这应该是释放字节缓冲区的“正确”方式?取消引用它并让 GC 清理它?我还调用 System.gc() 来尝试帮助它。

无论如何,我创建了一堆缓冲区,尊重它们;但在“一段时间”后,我收到各种内存错误:java.lang.OutOfMemoryError: Direct buffer memory

我可以增加 MaxDirectMemorySize,但它只会延迟上述错误。

我 99% 肯定我没有任何引用旧 ByteBuffers 的东西。有没有一种方法可以检查这个,看看究竟还有什么分配了 ByteBuffer?

最佳答案

您可以使用 Eclipse 中免费提供的 MAT 这样的工具,通过让它执行一些堆转储分析来查看保留字节缓冲区的内容。

我能想到的另一种方法是用其他具有终结器方法的东西包装您的字节缓冲区。

此外,Systen.gc() 不保证终结器将被执行,您需要执行 System.runFinalization() 以增加可能性。

关于java - 是什么阻碍了我的 ByteBuffer 释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7949771/

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