J'ai un fil dans une application Web Java qui provoque une sortie: strong> p> J'ai récemment repris ce projet Java et j'essaie de vous mettre au courant de Java et de ce projet. Je suis un développeur C #, je ne suis donc pas encore familier avec ce projet ou Java.
Je sais que je peux corriger l'erreur en utilisant le paramètre -xmx, mais je suis intéressé à attraper cette erreur afin que je puisse la connecter. L'erreur ne figure dans aucun des fichiers journaux et la sortie est affichée dans la console en mode de débogage dans Eclipse. P> P>
5 Réponses :
parce que OutofMemoryError code> est un
Erreur code>
, pas un Exception code>
. Etant donné que OutofMemoryError code> n'est pas une sous-classe de
Exception code>, la touche
(exception e) code> ne s'applique pas. P>
OutofMemoryError CODE> EXTENDRE
jetable code>
, cependant, vous devriez donc être capable de l'attraper. Voici un So Discussion sur quand (si jamais), vous devriez prendre des erreurs. Généralement, puisque vous ne pouvez rien faire à ce sujet, la recommandation est de ne pas prendre la peine d'attraper des erreurs dans le code de production. Mais étant donné un cas particulier où vous essayez de déboguer ce qui se passe, cela pourrait être utile. P>
Belle réponse avec des références de liaison. Je l'apprécie, merci!
Je recommanderais de capturer des jets dans la partie la plus extérieure de votre application (ou dans la partie la plus extérieure d'une méthode de thread) afin de pouvoir savoir pourquoi votre programme a aborti (s'il n'y a personne d'autre qui va le faire pour vous) .
une "~ erreur" n'est pas une "exception". p>
Vous devez attraper "erreur" ou "jetable" p>
OutofMemoryError s'étend VirtualMachineError tandis que l'exception s'étend directement versable. Donc, il n'est pas attrapé selon les spécifications Java. Si vous cherchez à attraper toutes les exceptions, ajoutez des captures (jette e) à la clause et vous l'aurez. P>
Pour être plus précis, OutofMemoryError s'étend VirtualMachineError, qui étend une erreur, et comme les erreurs ne sont pas des exceptions, une prise (exception) ne peut pas l'attraper
Bingo. Pensé à énumérer l'arbre entier mais a été paresseux :)
java.lang.outofMemoryloryError ne prolonge pas java.lang.exception donc ce n'est pas une exception. OutofMemoryError s'étend java.lang.error. Si vous souhaitez attraper une erreur, essayez ceci:
private void doSomeWork() { try { processData(); //Causes OutOfMemoryError System.out.println("This line does not execute"); } catch (Error e) { System.out.println("Exception. This line does not execute."); //Log error } finally { System.out.println("finally. This line does execute"); System.out.println("Thread name: " + Thread.currentThread().getName()); } }
Ce que je ferai d'habitude, c'est ajouter une "inconceptionExceptionDharler" à un thread, donc si quelque chose vous fuit au moins avoir une chance de connecter le problème et peut-être faire un certain nettoyage. P>