2015-08-05 11 views
5

Vedi this question dove ognuno parla di come "ovviamente" le prestazioni subiranno, o eccezioni dovrebbero essere evitati quando le prestazioni sono un problema, eccPerché le eccezioni sono dannose per le prestazioni?

Ma non ho visto una buona spiegazione per Perché eccezioni lancio sono male per le prestazioni, tutti in quella domanda sembrano darlo per scontato.

Il motivo per cui lo chiedo è che sto tentando di ottimizzare un'applicazione e ho notato che diverse centinaia di eccezioni vengono lanciate e inghiottite in determinate azioni, come il clic su un pulsante per caricare una nuova pagina.

+1

sembra essere indirizzato qui: http://mortoray.com/2012/04/02/everything-wrong-with-exceptions/ – bcorso

+0

Duplicato di http://stackoverflow.com/questions/299068/how-slow -are-java-exceptions –

+0

Riapertura perché il duplicato collegato ha più di sette anni e non affronta risultati più recenti sulle prestazioni delle eccezioni. – chrylis

risposta

5

In primo luogo, ovviamente, è semplicemente un cattivo design perché "eccezione" ha un significato semantico ("alcune circostanze impediscono a questo metodo di adempiere al suo contratto"), e questo sta abusando della caratteristica in un modo a sorpresa.

Nel caso di Java, la creazione di oggetti di eccezione (in particolare, la compilazione di tracce di stack) è estremamente costosa in quanto comporta lo spostamento della pila, numerose allocazioni di oggetti e manipolazioni di stringhe e così via. In realtà il lancio dell'eccezione non è dove si trova la penalità di prestazione principale.

+3

Non proprio così. Di quali allocazioni oggetto e manipolazioni di stringhe stai parlando? 'StackTraceElement's viene creato pigramente sulla chiamata' getStackTrace() ', non sul lancio o sulla cattura di un'eccezione. Inoltre, le eccezioni implicite a caldo (come NullPointerException, ClassCastException, ArrayIndexOutOfBoundsException etc) non richiedono nemmeno lo stack walking: sono veloci come 'goto'. – apangin

Problemi correlati