在我的應用程序中,我比較兩個docx文件並創建一個html比較文件,當我嘗試使用低於150或170行的文件時,則沒有問題,而我嘗試比較大文件像200行或以上,那麼這時它顯示使用docx4j進行docx比較時出現OutOfMemoryError
java.lang.OutOfMemoryError: Java heap space error,
可以任何人請幫助嗎?
在我的應用程序中,我比較兩個docx文件並創建一個html比較文件,當我嘗試使用低於150或170行的文件時,則沒有問題,而我嘗試比較大文件像200行或以上,那麼這時它顯示使用docx4j進行docx比較時出現OutOfMemoryError
java.lang.OutOfMemoryError: Java heap space error,
可以任何人請幫助嗎?
您正在運行內存,因爲你沒有使用Docx4jDriver類,它通過首先執行段落級別差異來使差異問題變得更容易處理。
使用它,像這樣:
Body newerBody = ((Document)newerPackage.getMainDocumentPart().getJaxbElement()).getBody();
Body olderBody = ((Document)olderPackage.getMainDocumentPart().getJaxbElement()).getBody();
// 2. Do the differencing
java.io.StringWriter sw = new java.io.StringWriter();
Docx4jDriver.diff(XmlUtils.marshaltoW3CDomDocument(newerBody).getDocumentElement(),
XmlUtils.marshaltoW3CDomDocument(olderBody).getDocumentElement(),
sw);
// 3. Get the result
String contentStr = sw.toString();
System.out.println("Result: \n\n " + contentStr);
Body newBody = (Body) org.docx4j.XmlUtils
.unmarshalString(contentStr);
我改變了我的代碼,現在我正在使用Docx4jDriver,我正在做段落級別的比較,但它仍然在150行之前顯示了330行之後的堆內存錯誤。 – bala
可以使堆空間較大與-Xmx和-Xmx爲VM參數
這裏更多關於Heap Size Tuning或這裏Heap size
嘗試增加使用命令行參數-Xms<minimum heap size>
Java堆大小-Xmx<maximum heap size>
和。
也是你確實有下列增加堆大小:
long heapSize = Runtime.getRuntime().totalMemory();
System.out.println("Heap Size = " + heapSize);
做這個排隊叫號Differencer.diff
前117
嘗試剖析應用程序,而不是使假設或智能猜測。您可以使用隨Jdk一起提供的visualvm或控制檯。另外,你可以使用jmap將你的應用程序的堆轉儲,然後使用jhat或eclipse mat(我更喜歡這個,谷歌它)看看消耗內存和尋找任何不尋常的行爲。
您爲java運行時允許多少內存空間?嘗試增加內存:) – ykatchou
請指定更多的細節,如你正在使用什麼方法(基於緩衝或基於流或基於通道) – Santosh
我已經嘗試增加tomcat catalina.bat文件中的jvm大小,現在我給了512m,並且我我使用javax.xml.transform.stream.StreamResult這個類並使用HtmlExporterNG2類再次將比較文檔轉換爲html文件。 – bala