我有一个代码,它从文件中读取大量数据并将其写入 excel 文件。我面临的问题是,当数据超出堆大小的限制时,它会抛出内存不足异常。我尝试增加堆大小,程序运行正常。但问题是,我的机器上的 RAM 有限,如果我将巨大的空间用于堆,机器就会变得非常慢。那么,有没有办法在处理一些数据限制后释放内存,这样我就不需要增加堆大小来运行我的代码?我对这种东西比较陌生,所以请提出一些想法
问问题
2767 次
3 回答
2
在这种情况下,您需要重组代码,以便它可以处理小块数据。创建一个小缓冲区,将数据读入其中,对其进行处理并将其写入 Excel 文件。然后继续下一次迭代,读入同一个缓冲区。
当然,您使用的 Excel 库需要能够像这样工作,并且不需要一次性编写整个文件。
于 2012-05-04T06:59:25.913 回答
0
您可以将 DirectByteBuffer 与 Buffer.allocateDirect(byteSize); 或 MemoryMappedFile,它们使用堆内存之外的内存空间。
于 2012-05-04T07:13:59.383 回答
0
我认为,JXL API 提供了这种有限的缓冲区功能。它是一个开源 API。 http://jexcelapi.sourceforge.net/
于 2012-05-04T07:11:18.420 回答