MappedByteBuffer内存使用情况

时间:2012-09-24 22:36:57

标签: java minecraft bukkit

我有一个程序在重新启动之前运行了12个多小时。该程序是一个Minecraft服务器,所以它不能经常重启。

无论如何大约每25-35分钟读取一个42-67mb的文件。我使用RandomAccessFile和MappedByteBuffer将文件读入ObjectInputStream。

问题是每次读取文件时内存使用量都会增加100-300mb,这最终会导致OOM,因为它永远不会被垃圾收集。我目前正在使用VisualVM来调试它,我只看到读取文件时ram使用量的增加。

我添加了

((DirectBuffer) buffer).cleaner().clean();

但它似乎没有让VM进行垃圾收集。

1 个答案:

答案 0 :(得分:3)

当我在2003年左右测量它时,映射缓冲区对随机访问文件的速度优势大约是20%。如果它自那以后增加,我会感到惊讶,如果它对于顺序的那么高,我也会感到惊讶访问。考虑到OOME的风险,这是不值得的。在FileInputStream周围的BufferedInputStream周围使用ObjectInputStream。