2010-11-16 11 views
6

Ciò presuppone che non chiamiamo il metodo .printstacktrace, ma solo il lancio e la cattura.Le tracce di stack vengono generate quando viene generata un'eccezione Java?

Stiamo prendendo in considerazione questo per alcuni colli di bottiglia delle prestazioni.

+3

Se si desidera una preformance, non si dovrebbe creare un'eccezione, che dovrebbe essere solo per casi eccezionali che non influiscono sulle prestazioni. Forse puoi fare ciò che stai tentando senza eccezioni? –

risposta

10

Sì. I costruttori Throwable() chiamano fillInStackTrace(). (Almeno in Sun/Oracle's JDK 6 per Windows.)

+3

Inoltre, se ti interessi le prestazioni puoi sovrascrivere 'fillInStackTrace()' per non fare nulla –

+3

C'è una differenza tra lanciare un'eccezione e costruirne una. –

+0

Hai assolutamente ragione, Andy. Non ho letto abbastanza attentamente la domanda. – perp

6

Stacktrace viene catturato quando viene creata un'eccezione.

Se davvero non ti interessa lo stacktrace, puoi costruire un'eccezione una volta e lanciarla più volte, ma sembra un trucco e può essere fonte di confusione.

4

Un oggetto Throwable cattura lo stack corrente (utilizzando il codice nativo) se verrà stampato o meno. Questo è il motivo per cui Eccezioni non dovrebbero essere (ab) usate per il flusso di controllo.

2

non è costruito pigramente quando il metodo printStackTrace() viene chiamato

Neal GDopo (ex ingegnere di Sun sulla squadra che costruisce Java) menzionato prestazioni eccezione here:

La parte più costosa di eccezione gestione di gran lunga è catturare l'analisi dello stack quando si crea l'eccezione

Inoltre, vedere this question.

+0

Le eccezioni costano molto perché ogni volta che viene lanciata un'eccezione, è necessario creare e compilare la traccia dello stack. Immagina un'operazione di trasferimento di equilibrio che non riesce nell'1% dei casi a causa della mancanza di fondi. Anche con questa percentuale relativamente bassa di guasti, le prestazioni potrebbero essere gravemente compromesse. Vedi i codici sorgente e i risultati dei benchmark qui: http://www.jquantlib.org/index.php/Cost_of_Exceptions_in_Java –

Problemi correlati