我正在分配大量的字节缓冲区。在完成它们之后,我将所有引用都设置为null。这应该是释放字节缓冲区的“正确”方法?取消引用并让GC清理它?我也调用System.gc()来尝试并帮助它。什么阻止了我的ByteBuffer从释放?
无论如何,我创建了一堆缓冲区,尊重它们;但在“一段时间”后,我得到各种内存错误:java.lang.OutOfMemoryError:直接缓冲区内存
我可以增加MaxDirectMemorySize,但它只是延迟了上述错误。
我99%肯定我没有任何东西引用旧的ByteBuffers。有没有办法来检查这个来看看它还有一个ByteBuffer分配了什么?
引用据称未引用的数据结构往往在集合类隐藏掉。其他地方包括听众和其他内部类的构造。我会先检查那些地方。 –