質問

私のアプリケーションでは、2つのDocxファイルを比較し、150行または170行のファイルで試したときに1つのHTML比較ファイルを作成しています。それが示す時間

java.lang.OutOfMemoryError: Java heap space error,

誰かがこれについて助けてください?

役に立ちましたか?

解決

docx4jdriverクラスを使用していないため、メモリが不足しているため、最初に段落レベルのdiffを実行することで、diffの問題がより扱いやすくなります。

そうするようにそれを使用してください:

        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を使用してヒープスペースを大きくすることができます

詳細についてはこちら ヒープサイズのチューニング またはこちら ヒープサイズ

コマンドライン引数を使用してJavaヒープサイズを増やしてみてください -Xmx<maximum heap size>-Xms<minimum heap size>.

また、コードでは、以下でヒープサイズを実際に増やしたことをテストしてください。

long heapSize = Runtime.getRuntime().totalMemory();
System.out.println("Heap Size = " + heapSize);

電話する前にこれを行います Differencer.diff 117行目。

仮定やインテリジェントな推測をするのではなく、アプリケーションをプロファイリングしてみてください。 jdkに出荷されるVisualVMまたはコンソールを使用できます。

また、JMAPを使用してアプリケーションのヒープダンプを使用してから、JHATまたはEclipse Mat(これを好む、Google It Out)を使用して、メモリを消費しているものを確認し、異常な動作に注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top