2010-09-29 9 views
8

Ho un programma che a volte lancia OOME, Capisco che c'è un flag nelle opzioni JVM che posso impostare e ogni volta che appare un certo errore/eccezione (come OOME) chiama uno script che ho scritto. Lo script darà all'utente una notifica e chiamerà il programma con un argomento diverso in modo che non ottenga di nuovo OOME.come catturare OutOfMemoryError in JVM ed eseguire uno script se viene rilevato?

qualcuno sa come impostare questo flag? quali sono le opzioni JVM che devo impostare? Ho cercato ovunque on line e non ho trovato la risposta.

aiutatemi per favore! Grazie, Aye

+1

digitare 'java -X' al prompt dei comandi. Otterrai un elenco di tutte le opzioni estese. Potrebbe aiutare. –

risposta

-3

ho trovato un suggerimento in un forum: catturare l'OOME nell'applicazione (come direttamente principale, supponendo che si sta singolo thread) e fare questo nel gestore catch:

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

Ripulire il cumulo potrebbe liberare quel tanto che basta la memoria per produrre un ultimo errore di messag e prima di morire.

+0

grazie, ma l'applicazione è molto sparsa e non voglio prenderla dentro preferisco chiamare il file .dat dalla JVM stessa – Aye

+8

uno penserebbe che la JVM avrebbe tentato qualche giro di GC prima di lanciare un OOME stesso; questo non è garantito per fare davvero molto di tutto. –

Problemi correlati