如何克服java堆空间的OutOfMemoryError?
问题描述:
在使用JOpenDoc API处理ODS工作表时,为Java堆空间获取OutOfMemoryError。处理表包含6000个记录。根据JProfiler,如果记录更多,消耗的内存空间就会变得更多。如何摆脱这个错误,而不增加-X参数的JVM大小。这是我的java代码,这是造成内存不足。如何克服java堆空间的OutOfMemoryError?
SpreadSheet spreadSheet=SpreadSheet.createFromFile(new File("document.ods")); //memory-35 MB
Sheet sheet1=spreadSheet.getSheet(1); // consumed memory - 47 MB
Sheet sheet2=spreadSheet.getSheet(2); // consumed memory - 59 MB
Sheet sheet3=spreadSheet.getSheet(3); // outofmemory error since the default size is 64 MB
答
您需要使用-Xmx增加内存或减少内存使用量。例如,你是否需要一次装载3张纸?如果没有,释放对它的引用(例如sheet1 = null),垃圾收集器将处理它。
是否有避免使用-X标志的原因? – Jason 2012-02-29 03:03:14
恩,停止使用所有的内存?如果您拒绝将可用于JVM的内存增加到类似需要的内存,那么这是您的另一种选择。一次只能处理一张“表格”。 – 2012-02-29 03:03:17
@Jason:是的,因为表格记录可能会逐渐增加。在这种情况下,没有固定的堆内存要分配。正如我告诉你,如果记录数更多,堆内存增加更多。 – hemanth 2012-02-29 03:11:20