Referência do Java Try / Catch Block

Eu sei que entrar em um bloco catch tem algum custo significativo ao executar um programa, no entanto, eu queria saber se entrar em um bloco try {} também teve algum impacto, então eu comecei a procurar uma resposta no google com muitas opiniões, mas não benchmarking em todos. Algumas respostas que encontrei foram:

Java tentar / capturar o desempenho, é recomendável manter o que está dentro da cláusula try para um mínimo?Tente Catch Performance JavaJava tentar capturar blocos

No entanto, eles não responderam a minha pergunta com os fatos, então eu decidi tentar por mim mesmo.

Aqui está o que eu fiz. Eu tenho um arquivo csv com este formato:

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

onde tudo depois do status é opcional e nem terá o correspondente; Portanto, ao analisar uma validação deve ser feito para ver se o valor está lá, aqui é onde o problema try / catch veio à minha mente.

O código atual que herdei na minha empresa faz isso:

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 = "";
}

e repete o que é feito para e-mail com uid, nome, sobrenome e promo_code.

e eu mudei tudo para:

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

e de fato ele executa mais rápido. Ao analisar um arquivo que não possui as colunas opcionais. Aqui estão os tempos médios:

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

no entanto, eis o que me confundiu e a razão pela qual estou perguntando: ao executar o exemplo com valores para as colunas opcionais em todas as 8000 linhas do CSV, a versão if () ainda é melhor do que a versão try / catch, então minha pergunta é

O bloco try realmente não tem impacto no desempenho do meu código?

Os tempos médios para este exemplo são:

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

Alguém pode explicar o que está acontecendo aqui?

Muito obrigado

questionAnswers(1)

yourAnswerToTheQuestion