Benchmark de Java Try / Catch Block

Sé que entrar en un bloque catch tiene un costo significativo cuando se ejecuta un programa, sin embargo, me preguntaba si ingresar un bloque try {} también tuvo algún impacto, así que empecé a buscar una respuesta en Google con muchas opiniones, pero no se realizó una evaluación comparativa en todos. Algunas respuestas que encontré fueron:

Rendimiento de prueba / captura de Java, ¿se recomienda mantener lo mínimo dentro de la cláusula de prueba?Prueba Catch Performance JavaJava intenta atrapar bloques

Sin embargo, no respondieron mi pregunta con hechos, así que decidí intentarlo por mí mismo.

Esto es lo que hice. Tengo un archivo csv con este formato:

host;ip;number;date;status;email;uid;name;lastname;promo_code;

donde todo después del estado es opcional y ni siquiera tendrá el correspondiente; Entonces, al analizar una validación se debe hacer para ver si el valor está ahí, aquí es donde se me ocurrió la cuestión de probar / atrapar.

El código actual que heredé en mi empresa hace esto:

StringTokenizer st=new StringTokenizer(line,";");  
String host = st.nextToken();
String ip = st.nextToken();
String number = st.nextToken();
String date = st.nextToken();
String status = st.nextToken();                             
String email = "";
try{
    email = st.nextToken();
}catch(NoSuchElementException e){
    email = "";
}

y repite lo que se ha hecho para el correo electrónico con uid, name, lastname y promo_code.

y lo cambié todo por:

if(st.hasMoreTokens()){
    email = st.nextToken();
}

y de hecho se realiza más rápido. Al analizar un archivo que no tiene las columnas opcionales. Aquí están los tiempos promedio:

 --- Trying:122 milliseconds
 --- Checking:33 milliseconds

sin embargo, esto es lo que me confundió y la razón por la que lo pregunto: cuando se ejecuta el ejemplo con valores para las columnas opcionales en todas las 8000 líneas del CSV, la versión if () aún funciona mejor que la versión try / catch, así que mi pregunta es

¿Realmente el bloque try no tiene ningún impacto en el rendimiento de mi código?

Los tiempos promedio para este ejemplo son:

--- Trying:105 milliseconds
--- Checking:43 milliseconds

¿Alguien puede explicar lo que está pasando aquí?

Muchas gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta