我有一个程序在重新启动之前运行了 12 个多小时。该程序是一个我的世界服务器,所以它不能经常重新启动。
无论如何,大约每 25-35 分钟读取一个大小为 42-67mb 的文件。我使用 RandomAccessFile 和 MappedByteBuffer 将文件读入 ObjectInputStream。
问题是每次读取文件时,内存使用量都会增加 100-300mb,这最终会导致 OOM,因为它永远不会被垃圾收集。我目前正在使用 VisualVM 对其进行调试,并且仅在读取文件时看到内存使用量增加。
我已经添加了
((DirectBuffer) buffer).cleaner().clean();
但它似乎并没有让虚拟机进行垃圾收集。