Domanda

nella mia domanda mi sto paragonando due file docx e la creazione di file di confronto uno html, quando ho provato con sotto dei 150 o 170 righe del file, quindi non c'è alcun problema, mentre cerco di confrontare i file di grandi dimensioni come 200 linee o superiore che poi quel tempo mostra la

java.lang.OutOfMemoryError: Java heap space error,

Può uno aiuto per favore su questo?

È stato utile?

Soluzione

Si esegue fuori la memoria, perché non si utilizza la classe Docx4jDriver, che rende il problema diff più trattabile facendo un diff livello di paragrafo prima.

Usa in questo modo:

        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);

Altri suggerimenti

è possibile rendere lo spazio più grande con heap -Xmx e Xmx come argomenti VM

Qui di più su Dimensione heap sintonia o qui Mucchio dimensioni

Provare ad aumentare la dimensione heap Java utilizzando la riga di comando argomenti -Xmx<maximum heap size> e -Xms<minimum heap size>.

Anche nel codice, prova che in realtà hanno aumentato la dimensione heap con la seguente:

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

Fate questo prima di chiamare Differencer.diff on line 117.

Prova profiling la vostra applicazione, piuttosto che fare ipotesi o congettura intelligente. È possibile utilizzare VisualVM o console che viene fornito con JDK.

Inoltre, si può prendere un heap dump della vostra applicazione utilizzando jmap e quindi utilizzare jhat o eclisse mat (preferisco questo, google out) per vedere che cosa sta consumando la memoria e guardare fuori per qualsiasi comportamento insolito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top