2012-07-19 8 views
5

Da eccezioni capitolo in Effective Java:In che modo è possibile inserire del codice nel tentativo di catturare i blocchi impedire a JVM di eseguire l'ottimizzazione?

Posizionamento di codice all'interno di un blocco try-catch inibisce alcune ottimizzazioni che moderni implementazioni JVM potrebbero altrimenti svolgere

Perché e come fa un blocco try-catch previene l'ottimizzazione da parte di JVM?

+0

[Questa domanda] (http://stackoverflow.com/questions/299068/how-slow-are-java-exceptions) può essere utile. – Leri

risposta

2

Uno dei motivi "per cui" è che le eccezioni e la gestione delle eccezioni sono assunto ad essere eccezionale; cioè codice che viene eseguito raramente. Ne consegue che il tempo trascorso dal compilatore JIT sull'ottimizzazione dei gestori di eccezioni avrà un piccolo vantaggio per le prestazioni complessive.

L'ottimizzatore del compilatore JIT deve bilanciare i vantaggi in termini di prestazioni delle ottimizzazioni che sono efficaci contro i costi di ottimizzazione. Questi ultimi comprendono:

  • il costo del controllo precondizioni complicati per vedere se un'ottimizzazione è possibile,
  • il costo di fare l'ottimizzazione effettivo, e
  • il costo (a Oracle) di applicazione e il mantenimento di un complesso pezzo di software che fa un'ottimizzazione che è (in condizioni normali/ipotesi) non sarà efficace.

Ci possono essere anche motivi tecnici che inibiscono l'ottimizzazione dei gestori di eccezioni. Ad esempio, potrebbe non essere facile (o anche possibile) per l'ottimizzatore capire da dove proviene il flusso di controllo ". Quindi, l'ottimizzazione che si basa sul sapere che (ad esempio la memorizzazione nella cache di materiale nei registri, il sollevamento di sottoespressioni comuni, ...) non può essere eseguita.

5

La JVM potrebbe non combinare o riordinare le operazioni all'interno del blocco try/catch con quelle all'esterno del blocco try/catch. Ogni livello di complessità rende l'ottimizzazione più difficile. Se è un caso relativamente raro, potrebbe non essere gestito dalla JVM che, in caso di dubbio, sceglierà la correttezza piuttosto che il codice ottimale.

+0

puoi elaborare "Se si tratta di un caso relativamente raro, potrebbe non essere gestito dalla JVM che, in caso di dubbio, scegli la correttezza piuttosto che il codice ottimale." . La tua risposta sembra rispondere alla parte come, tuttavia non sono sicuro della parte del perché, comunque. – Geek

+2

Il perché è che è una situazione complicata e raramente utile. –

-1

Controllare il seguente link:

How slow are Java exceptions?

credo eccezioni sono oggetti Java e questi oggetti devono essere creati. La creazione di un oggetto è un'operazione costosa. Quindi usa le eccezioni solo per gestire gli errori e non per controllare il flusso.

Problemi correlati