Java heap space, fortsätta ändå?

Permalänk
Medlem

Java heap space, fortsätta ändå?

Hej, jag har problem med att läsa väldigt stora och omfattande XML-filer.
Det som skapar problemet är denna rad.

//org.w3c.dom.Document.getDocumentElement()
doc.getDocumentElement().normalize(); //<<<<<<<<--------------

Jag har fått den att jobba upp till 6-7 minuter och jag klarar riktigt stora filer men jag vill att applicationen säger
FILEN ÄR FÖR OMFATTANDE, FORTSÄTTER MED NÄSTA FIL

Detta vill jag ju göra med en try en catch, men det fungerar inte då jag inte har något minne kvar att fortsätta jobba med. Hur gör jag för att avbryta precis innan minnet tar slut?

Det spelar ingen roll om jag sätter andra -Xms och -Xmx värden, för XML filerna skapas av en annan applikation och kan i stort sett bli oändligt stora så problemet kommer fortfarande att kunna uppstå.

Tack!

Visa signatur

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan

Permalänk
Medlem

Det är ju inte jätteenkelt att hantera situationer där heapen tar slut. I ditt fall låter det dock som du borde ha din catch någonstans där själva objektet som tar upp mycket minne (doc) inte längre är refererad. Då borde du egentligen kunna hantera situationen då objektet är möjligt att skräpuppsamla.

Nu vet ju inte jag riktigt vad det är du gör men om du jobbar med "oändligt" stora xml-filer så låter det ju definitivt som något av de strömmande alternativen är bättre (SAX eller StAX) och sedan normalisera individuella delar.

//C