Java - 字节缓冲区内存不足

时间:2014-03-14 16:48:45

标签: java file memory out-of-memory

1 个答案:

答案 0 :(得分:1)

现在,您正在为每个循环创建一个新缓冲区。根据您的垃圾回收,其中一些可能无法从内存中回收/释放,然后您就会耗尽。您可以使用System.gc()调用垃圾收集器,但无法保证它在任何给定时间实际运行。

使用-Xmx-Xms参数调用程序时,可以在命令行上增加分配给JVM的内存。此外,如果您不在32位窗口上,请确保使用64位JVM,因为32位具有内存限制,而前者则没有。从命令行运行java -version以查看当前系统JVM。

你可以将你的byte []缓冲区的声明移到你的循环之外(在while之上),这样它就会被清除并在每次迭代时重用。

Iterator iter = itemList.keySet().iterator();
numJKLs = 0;
byte[] buffer;
while (iter.hasNext()) {
    ...
    buffer = new byte[] ...
    ...
}

您要处理的文件有多大?你真的需要将它们中的每一个添加到levels变量中吗?您可以使用某些文件信息或统计信息吗?你的JVM目前分配了多少RAM?

要查看当前内存使用情况,您需要在运行时调试程序。查看如何为您选择的IDE做到这一点,并且您将能够在整个程序的生命周期内遵循任何对象的当前状态。