私のアプリケーションでは、2 つの docx ファイルを比較し、1 つの html 比較ファイルを作成しています。表示する時間
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);
VM引数として-Xmxおよび-Xmxを使用すると、ヒープスペースを大きくすることができます。
ヒープサイズの調整について詳しくはこちら、またはヒープサイズについてはこちら
仮定や知的な推測ではなく、アプリケーションのプロファイリングを試みてください。Jdk に同梱されている visualvm または console を使用できます。
また、jmap を使用してアプリケーションのヒープ ダンプを取得し、jhat または eclipse mat を使用して (私はこれが好きです。ググってみてください)、メモリを消費しているものを確認し、異常な動作を監視することもできます。
コマンド ライン引数-Xmx<maximum heap size>
およびを使用して、Java ヒープ サイズを増やしてみてください-Xms<minimum heap size>
。
また、コード内で、実際にヒープ サイズを増やしたことを次のようにテストします。
long heapSize = Runtime.getRuntime().totalMemory();
System.out.println("Heap Size = " + heapSize);
Differencer.diff
これは、117 番に電話する前に行ってください。