Benchmark Java Try / Catch Block

Wiem, że wejście do bloku catch ma pewien koszt znaczący podczas wykonywania programu, jednak zastanawiałem się, czy wprowadzenie bloku try {} również nie miało żadnego wpływu, więc zacząłem szukać odpowiedzi w google z wieloma opiniami, ale bez testu porównawczego wszystko. Niektóre odpowiedzi znalazłem:

Wydajność / próba Java, czy zaleca się ograniczenie do minimum tego, co znajduje się w klauzuli try?Wypróbuj Catch Performance JavaBloki próbujące Java

Jednak nie odpowiedzieli na moje pytanie faktami, więc postanowiłem spróbować tego dla siebie.

Oto co zrobiłem. Mam plik csv w tym formacie:

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

gdzie wszystko po statusie jest opcjonalne i nie będzie nawet odpowiadało; , więc podczas analizowania walidacji należy wykonać, aby sprawdzić, czy wartość jest obecna, tutaj pojawił się problem try / catch.

Obecny kod, który odziedziczyłem w mojej firmie, robi to:

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

i powtarza to, co zrobiono dla e-maila z uid, imieniem, nazwiskiem i kodem promo.

i zmieniłem wszystko na:

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

w rzeczywistości działa szybciej. Podczas analizowania pliku, który nie ma opcjonalnych kolumn. Oto średnie czasy:

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

jednak oto, co mnie zdezorientowało i powód, dla którego pytam: Gdy uruchamiasz przykład z wartościami dla opcjonalnych kolumn we wszystkich 8000 wierszach CSV, wersja if () nadal działa lepiej niż wersja try / catch, więc moje pytanie jest

Czy naprawdę blok try nie ma żadnego wpływu na wydajność mojego kodu?

Średni czas dla tego przykładu to:

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

Czy ktoś może wyjaśnić, co tu się dzieje?

Wielkie dzięki

questionAnswers(1)

yourAnswerToTheQuestion