Come indicato in Quanto lente sono le eccezioni Java? si può vedere che la lentezza di try {} catch {}
rientra nell'istanza dell'eccezione stessa.
La creazione di un'eccezione preleva l'intero stack di chiamate dal runtime e questo è dove si trova la spesa. Se non stai creando un'eccezione, questo è solo molto leggermente un aumento di tempo.
Nell'esempio fornito in questa domanda non ci sono eccezioni, non ci si aspetterebbe alcun rallentamento dalla loro creazione - non sono create. Invece, ciò che è qui è un try {} finally {}
per gestire deallocazione delle risorse all'interno del blocco finally.
Quindi per rispondere alla domanda, no, non esiste una spesa reale in runtime all'interno di una struttura try {} finally {}
che non usi eccezioni (non è inaudita, come visto). Ciò che è probabilmente costoso è il tempo di manutenzione quando si legge il codice e si vede questo stile di codice non tipico e il programmatore deve pensare che qualcosa di simile accade in questo metodo dopo il return
prima di ritornare alla precedente chiamata.
Come è stato detto, la manutenzione è un argomento per entrambi modi per farlo. Per la cronaca, dopo la considerazione, la mia preferenza sarebbe l'approccio alla fine.
Considera il tempo di mantenimento di insegnare a qualcuno una nuova struttura linguistica. Vedere try {} finally {}
non è qualcosa che si vede spesso nel codice Java e quindi può essere fonte di confusione per le persone. Esiste un certo grado di tempo di manutenzione per l'apprendimento di strutture un po 'più avanzate in Java rispetto a ciò che le persone hanno familiarità con il vedere.
Viene eseguito il blocco finally {}
sempre . E questo è il motivo per cui dovresti usarlo. Considera anche il tempo di manutenzione del debug dell'approccio non-finale quando qualcuno dimentica di includere un logout al momento giusto, o lo chiama in un momento improprio, o dimentica di tornare / uscire dopo averlo chiamato in modo che venga chiamato due volte. Ci sono così tanti possibili bug con questo che l'uso di try {} finally {}
rende impossibile avere.
Quando si pesa questi due costi, è molto costoso nel tempo di manutenzione non utilizzare l'approccio try {} finally {}
. Mentre le persone possono dicker su quanti millisecondi frazionari o istruzioni jvm aggiuntive il blocco try {} finally {}
viene confrontato con l'altra versione, è necessario considerare anche le ore trascorse nel debug il meno ideale del modo di affrontare la deallocazione delle risorse.
Scrivi prima il codice gestibile e preferibilmente in un modo che impedisca la scrittura di bug in seguito.