我正在使用 Java 8 运行 apache poi 4.0.0 并尝试用数据填充模板并将其保存到输出流。这会在将工作簿写入目标路径时导致问题,但仅在以调试模式/在其他计算机上运行时才会出现。模板文件在填充数据之前的大小为 7.5 MB我对其进行了调试,发现方法调用worksheet.save(out, xmlOptions);在XSSFSheet某个时候停止了。调试值out:class: org.apache.poi.openxml4j.opc.internal.MemoryPackagePartOutputStreampart: Name: /xl/worksheets/sheet10.xml - Content Type: application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xmlpart-relationships: 3 relationship(s) = [/xl/worksheets/_rels/sheet10.xml.rels,/xl/worksheets/sheet10.xml,/xl/worksheets/_rels/sheet10.xml.rels]调试值xmlOptions:SAVE_USE_DEFAULT_NAMESPACE=nullCHARACTER_ENCODING=UTF-8SAVE_OUTER=nullSAVE_SUGGESTED_PREFIXES={http://schemas.openxmlformats.org/drawingml/2006/chart=c, http://schemas.openxmlformats.org/wordprocessingml/2006/main=w, http://schemas.microsoft.com/office/word/2006/wordml=wne, http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes=vt, http://schemas.openxmlformats.org/presentationml/2006/main=p, urn:schemas-microsoft-com:office:word=w10, urn:schemas-microsoft-com:vml=v, http://schemas.openxmlformats.org/drawingml/2006/main=a, http://schemas.openxmlformats.org/officeDocument/2006/math=m, http://schemas.openxmlformats.org/officeDocument/2006/relationships=r, urn:schemas-microsoft-com:office:excel=x, urn:schemas-microsoft-com:office:office=o, http://schemas.openxmlformats.org/markup-compatibility/2006=ve, http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing=wp}ENTITY_EXPANSION_LIMIT=1SAVE_AGGRESSIVE_NAMESPACES=nullSAVE_SYNTHETIC_DOCUMENT_ELEMENT={http://schemas.openxmlformats.org/spreadsheetml/2006/main}worksheet再深入一点,很明显它在这种方法上失败了:public void save(OutputStream os, XmlOptions options) throws IOException { XmlCursor cur = newCursorForce(); try { cur.save(os, makeInnerOptions(options)); } finally { cur.dispose(); } }在XmlObjectBase,特别是在newCursorForce()。这种方法在所有其他机器上以及在调试模式下的机器上失败的原因是什么?如果正常执行,整个应用程序运行流畅。
1 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
正如我在第二次编辑中已经得出的结论,这确实是一个内存问题。使用作为 VM 参数执行应用程序-Xms1G -Xmx4G
,应用程序没有引起任何问题,并且运行时非常接近我在测试时得到的
添加回答
举报
0/150
提交
取消