我们发现,当使用JXL生成xls时,调用WritableWorkbook.close()将暂停系统。似乎资源没有被释放。避免在JXL调用时暂停WritableWorkbook.close()
Someone has also encountered this problem but no answer was given
我们测试JXL的几个版本,但没有任何改变。问题在哪里?
book.write();
//close() caused halting
book.close();
我们发现,当使用JXL生成xls时,调用WritableWorkbook.close()将暂停系统。似乎资源没有被释放。避免在JXL调用时暂停WritableWorkbook.close()
Someone has also encountered this problem but no answer was given
我们测试JXL的几个版本,但没有任何改变。问题在哪里?
book.write();
//close() caused halting
book.close();
调查的源代码之后,我们发现,调用WritableWorkbook.close()时,默认行为调用System.gc()的每一次!
void close(boolean cs) throws IOException, JxlWriteException {
CompoundFile cf = new CompoundFile(data,
data.getPosition(),
outputStream,
readCompoundFile);
cf.write();
outputStream.flush();
data.close();
if (cs) {
outputStream.close();
}
// Cleanup the memory a bit
data = null;
if (!workbookSettings.getGCDisabled()) {
System.gc();
}
}
有两种方法可以通过系统属性
jxl.nogc=true
避免这种情况,JXL的禁用GC(添加-Djxl.nogc=true
到JVM参数)XX:+DisableExplicitGC
,禁用所有明确的GC(这是理想的下大多数情况下)。WorkbookSettings workbookSettings = new WorkbookSettings();
workbookSettings.setGCDisabled(true);
readwb = Workbook.getWorkbook(file.getInputStream(), workbookSettings);
你能详细说明一下这段代码在做什么吗?虽然它可能(或可能不)解决问题,但目前它并未显示如何或为何。 – Holloway