2010-11-16 9 views
6

Cela suppose que nous n'appelons pas la méthode .printstacktrace - juste lancer et attraper.Les traces de pile sont-elles générées lorsqu'une exception Java est générée?

Nous considérons ceci pour certains goulets d'étranglement de performance.

+3

Si vous voulez une préformance, vous ne devriez pas émettre d'exception, cela ne devrait être que pour des cas exceptionnels qui n'affectent pas votre performance. Peut-être que vous pouvez faire ce que vous essayez sans exception? –

Répondre

10

Oui. Les constructeurs Throwable() appellent fillInStackTrace(). (Au moins dans le JDK 6 de Sun/Oracle pour Windows.)

+3

également, si vous vous souciez des performances, vous pouvez remplacer 'fillInStackTrace()' pour ne rien faire –

+3

Il y a une différence entre lancer une exception et en construire une. –

+0

Vous avez absolument raison, Andy. Je n'ai pas lu la question assez attentivement. – perp

6

Stacktrace est capturée lorsque l'exception est construite.

Si vous ne vous souciez vraiment pas de stacktrace, vous pouvez construire une exception une seule fois et la lancer plusieurs fois, mais cela ressemble à un hack et peut être source de confusion.

4

Un objet Throwable capture la pile en cours (à l'aide du code natif) si elle sera imprimée ou non. C'est la raison pour laquelle les exceptions ne doivent pas être (ab) utilisées pour le contrôle du flux.

2

il ne se construit pas paresseusement lorsque la méthode printStackTrace() est appelée

Neal Gafter (ancien ingénieur Sun sur l'équipe qui a construit Java) a mentionné la performance d'exception here:

La partie la plus coûteuse exception manipulation de loin est la capture de la trace lors de la création pile l'exception

Aussi, voir this question.

+0

Les exceptions coûtent beaucoup car chaque fois qu'une exception est levée, la trace de la pile doit être créée et remplie. Imaginez une opération de transfert de solde qui échoue dans 1% des cas en raison d'un manque de fonds. Même avec ce taux de défaillances relativement faible, les performances peuvent être sérieusement affectées. Voir le code source et les résultats de référence ici: http://www.jquantlib.org/index.php/Cost_of_Exceptions_in_Java –

Questions connexes