2010-03-09 3 views
1

J'utilise ASANT pour exécuter un fichier xml qui pointe vers un fichier NARS.jar. (Je n'ai pas le dossier de projet du NARS.jar)Sortir de la mémoire: espace de tas Java, mais en regardant l'espace de tas, il utilise 50 Mo maximum

Je reçois « java.lang.OutOfMemoryError. Java espace de tas

je VisualVM regarder le tas pendant l'exécution du SNRA. pot, et il dit qu'il utilise 50 Mo maximum du heapspace.

J'ai mis

la taille initiale et maximale de heapspace 512 MB. quelqu'un at-il un Ide ce qui pourrait être mal?

J'ai une mémoire physique de 1 Go et j'ai créé un fichier d'échange de 5 Go (pour but du test).

Merci d'avance.

+0

Si vous citez vos paramètres '-Xmumble', cela vous aidera probablement - peut-être avez-vous une erreur dans vos paramètres d'espace de heaume? –

+0

set ANT_OPTS = "- XX: + HeapDumpOnOutOfMemoryError" "-Xms512m" "-Xmx512m" ...... etc Est-il possible de définir les paramètres de tas de Java en particulier pour Java? ou dois-je le définir pour l'application? – Ikky

+0

set ANT_OPTS est défini dans Asant.bat – Ikky

Répondre

0

Voulez-vous forcer le processus lors de l'exécution du fichier NARS.jar? La définition de ANT_OPTS n'aura d'effet que sur la machine virtuelle exécutant le système ant. Si vous utilisez la tâche Java pour démarrer/fork un processus VM supplémentaire, les paramètres ANT_OPTS ne seront pas hérités. Si c'est le cas, définissez fork = "false" dans la tâche java (si vous n'utilisez aucune autre option nécessitant l'activation de fork) ou définissez maxmemory = "512m".

0

Les fichiers XML sont des porcs de mémoire notoires car la représentation DOM peut souvent nécessiter dix fois leur taille sur le disque.

Je suppose que c'est là que vous atteignez la limite. Y a-t-il une trace de pile avec l'exception de mémoire insuffisante?

+0

Uniquement lorsque l'on utilise DOM au lieu de SAX ou VTD-XML pour analyser les fichiers XML. – BalusC

1

Votre application essaie peut-être d'allouer de la mémoire qui dépasse la limite de 512 m, vous voyez donc une erreur hors mémoire même si seulement 50 m sont utilisés. Pour tester cela, je mettrais:

-Xms512m -Xmx1024m

Et voir ce qui se passe. Je voudrais également essayer un fichier de test plus petit, disons 1g. Continuez à réduire la taille du fichier jusqu'à ce que vous arrêtiez de voir l'erreur. Si vous réussissez, alors le problème est que ce que vous essayez de faire et la façon dont vous essayez de le faire prend trop de mémoire. Il est temps de chercher une autre approche.

Questions connexes