Я знаю, что переход в блокирующий блок имеет некоторую значительную стоимость при выполнении программы, однако мне было интересно, было ли вхождение в блок try {}, и я начал искать ответ в google со многими мнениями, но нет бенчмаркинга вообще. Некоторые ответы, которые я нашел, были:
- Производительность Java try/catch, рекомендуется ли сохранить то, что находится в предложении try, до минимума?
- Попробуйте Catch Performance Java
- Java try catch блокирует
Однако они не ответили на мой вопрос фактами, поэтому я решил попробовать это для себя.
Вот что я сделал. У меня есть файл csv с таким форматом:
host;ip;number;date;status;email;uid;name;lastname;promo_code;
где все после статуса является необязательным и даже не имеет соответствующего;, поэтому при анализе проверки необходимо сделать, чтобы увидеть, есть ли значение, здесь, где проблема try/catch возникла у меня.
Текущий код, который я унаследовал в моей компании, делает следующее:
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 = "";
}
и он повторяет, что он сделал для электронной почты с uid, name, lastname и promo_code.
и я изменил все на:
if(st.hasMoreTokens()){
email = st.nextToken();
}
и на самом деле он работает быстрее. При анализе файла, который не имеет дополнительных столбцов. Вот среднее время:
--- Trying:122 milliseconds
--- Checking:33 milliseconds
однако вот что меня смутило и почему я спрашиваю: при запуске примера со значениями для дополнительных столбцов во всех 8000 строках CSV версия if() все же работает лучше, чем версия try/catch, поэтому мой вопрос
Действительно ли блок try не влияет на мой код на производительность?
Среднее время для этого примера:
--- Trying:105 milliseconds
--- Checking:43 milliseconds
Может кто-нибудь объяснить, что здесь происходит?
Спасибо большое