我正在使用 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
提交
取消