Per quanto posso ricordare dai miei vecchi giorni di lettura bytecode, il numero di clausole catch non ha alcun effetto significativo sulle prestazioni.
Quando si verifica un'eccezione, la JVM sa passare alla sequenza bytecode che implementa la clausola catch osservando l'eccezione in una tabella che fa parte del codice byte della classe. In generale, ogni metodo che intercetta un'eccezione è associato a una tabella delle eccezioni che fa parte del file di classe, insieme al codice byte del metodo. La tabella delle eccezioni contiene una voce per ogni eccezione che viene rilevata da ciascun blocco try. Ogni voce contiene: i punti iniziale e finale, l'offset del programma (PC) all'interno della sequenza di bytecode da saltare a, e un indice di pool costante del tipo di eccezione (cioè la classe) che viene catturato.
Se viene generata un'eccezione durante l'esecuzione di un metodo, la JVM ricerca nella corrispondenza la tabella delle eccezioni per una corrispondenza. Si verifica una corrispondenza se il PC corrente si trova nell'intervallo specificato dalla voce e se la classe di eccezione generata è quella specificata dalla voce (o è una sottoclasse di essa).
Quindi la risposta alla tua domanda dipende da come questa ricerca viene implementata. Per quanto ne so, la JVM cerca nella tabella nello stesso ordine in cui le voci appaiono nella tabella e quando viene trovata la prima corrispondenza, la JVM imposta il PC nella nuova posizione e continua l'esecuzione da lì.
Penso che a meno che non ci siano MOLTE eccezioni non si noterebbe un impatto significativo, ma se fossi in te e se questo problema fosse fondamentale per me, lo farei un benchmark sulla particolare JVM che stai usando .
Ori
Come corollario, se hai il codice in cui il volume di eccezioni è un problema di prestazioni, molto probabilmente non utilizzi le eccezioni correttamente. –
@John: concordato - anche se in questo caso l'OP ha esplicitamente dichiarato di essere interessato alle prestazioni in cui non vengono * lanciate eccezioni *. –