2010-09-29 22 views
8

J'ai un programme qui lance parfois OOME, Je comprends qu'il y a un drapeau dans les options JVM que je peux définir et quand une certaine erreur/exception apparaît (comme OOME), il appelle un script que j'ai écrit. Le script donnera à l'utilisateur une notification et appellera le programme avec un argument différent afin qu'il ne reprenne plus OOME.comment intercepter OutOfMemoryError dans JVM et exécuter un script s'il est intercepté?

est-ce que quelqu'un sait comment placer ce drapeau? Quelles sont les options JVM que je dois définir? J'ai regardé partout en ligne et n'a pas pu trouver la réponse.

aidez-moi s'il vous plaît! Merci, Aye

+1

tapez 'java -X' à l'invite de commande. Vous obtiendrez une liste de toutes les options étendues. Pourrait aider. –

Répondre

-3

je trouve une suggestion dans un forum: attraper les oome dans votre application (comme directement principale, en supposant que vous êtes seul thread) et faire dans le gestionnaire de capture:

catch (OutOfMemoryError not_again) { 
    System.gc(); 
    System.runFinalization(); 
    System.gc(); 
    System.out.println("Your error message"); 
} 

Réhabiliter le tas pourrait libérer de la mémoire juste assez pour produire un dernier messag d'erreur e avant de mourir.

+0

merci, mais l'application est très clairsemée et je ne veux pas l'attraper à l'intérieur je préfère appeler le fichier .dat de la JVM lui-même – Aye

+8

on pourrait penser que la JVM tenterait quelques tours de GC avant de lancer un OOME lui-même; Ce n'est pas garanti de faire vraiment beaucoup de choses. –