如何在不增加eclipse上的堆大小的情况下避免内存不足异常

时间:2012-05-04 06:54:50

标签: java memory out-of-memory heap-memory

我有一个代码,它从文件中读取大量数据并将其写入excel文件。我面临的问题是,当数据超出堆大小的限制时,它会抛出一个内存不足的异常。我尝试增加堆大小,程序正常运行。但问题是,我的机器上的RAM有限,如果我将大量空间用于堆,机器变得非常慢。那么,有没有办法在处理一些数据限制后释放内存,这样我就不需要增加运行代码的堆大小了?我对这种东西比较新,所以请提出一些想法

3 个答案:

答案 0 :(得分:2)

在这种情况下,您需要重新构建代码,以便它可以处理小块数据。创建一个小缓冲区,将数据读入其中,处理它并将其写入Excel文件。然后继续下一次迭代,读入相同的缓冲区。

当然,您使用的Excel库需要能够像这样工作,并且不需要一次性写入整个文件。

答案 1 :(得分:0)

我认为,JXL API提供了这种有限的缓冲功能。它是一个开源API。 http://jexcelapi.sourceforge.net/

答案 2 :(得分:0)

您可以将DirectByteBuffer与Buffer.allocateDirect(byteSize)一起使用;或者MemoryMappedFile,它们使用堆内存中的内存空间。