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 blocosNo 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