如this comment所示,我决定用建议的变量运行SSPerformanceTest.java,看看我的代码或设置是否有问题.结果显示HSSF(.xls)和XSSF(.xlsx)之间有显着差异:
1)HSSF 50000 50 1:经过1秒钟
2)SXSSF 50000 50 1:经过5秒钟
3)XSSF 50000 50 1:经过15秒
FAQ具体说:
If you can’t run that with 50,000 rows and 50 columns in all of HSSF,XSSF and SXSSF in under 3 seconds (ideally a lot less!),the problem is with your environment.
接下来,它说要运行我已经完成的XLS2CSV.java.在上面生成的XSSF文件(50000行和50列)中进行加载大约需要15秒 – 写入文件所需的时间相同.
我的环境有问题吗?如果有的话,我如何进一步调查?
来自VisualVM的统计数据显示在处理过程中使用的堆高达1.2Gb.当然这是太高了,因为在加工开始之前,这是一个额外的演出呢?
注意:上面提到的堆空间异常仅发生在生产(在Google App Engine上),而仅在.xlsx文件中发生,但是这个问题中提到的测试都已经在我的开发机器上运行了-Xmx2g.我希望如果我可以解决我的开发设置的问题,它将在部署时使用更少的内存.
来自应用引擎的堆栈跟踪:
Caused by: java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260)
at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.startElement(Cur.java:2997)
at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3211)
at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1802)
at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parSEOpenTagNS(PiccoloLexer.java:1521)