Benchmark von Java Try / Catch Block

Ich weiß, dass das Eingeben eines Catch-Blocks bei der Ausführung eines Programms erhebliche Kosten verursacht. Ich habe mich jedoch gefragt, ob die Eingabe eines try {} -Blocks auch Auswirkungen hat. Daher habe ich bei Google nach einer Antwort mit vielen Meinungen gesucht, aber ohne Benchmarking bei alles. Einige Antworten, die ich gefunden habe, waren:

Java Try / Catch-Leistung. Wird empfohlen, die in der Try-Klausel enthaltene Leistung auf ein Minimum zu beschränken?Versuchen Sie Catch Performance JavaJava versuchen, Blöcke zu fangen

Da sie meine Frage jedoch nicht mit Fakten beantwortet haben, habe ich mich entschlossen, es selbst zu versuchen.

Hier ist was ich getan habe. Ich habe eine CSV-Datei mit diesem Format:

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

Wobei alles nach Status optional ist und nicht einmal den entsprechenden haben wird; Wenn also beim Parsen eine Validierung durchgeführt werden muss, um festzustellen, ob der Wert vorhanden ist, ist mir hier das Problem mit dem Versuch / Fang in den Sinn gekommen.

Der aktuelle Code, den ich in meiner Firma geerbt habe, sieht folgendermaßen aus:

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

und es wiederholt, was es für email mit uid, name, lastname und promo_code getan hat.

und ich habe alles geändert zu:

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

und in der Tat führt es schneller. Beim Parsen einer Datei, die keine optionalen Spalten enthält. Hier sind die Durchschnittszeiten:

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

Hier ist jedoch, was mich und den Grund, den ich frage, verwirrt hat: Wenn Sie das Beispiel mit Werten für die optionalen Spalten in allen 8000 Zeilen der CSV ausführen, ist die if () -Version immer noch besser als die try / catch -Version, daher meine Frage ist

Hat der Try-Block wirklich keine Auswirkungen auf die Leistung meines Codes?

Die Durchschnittszeiten für dieses Beispiel sind:

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

Kann jemand erklären, was hier los ist?

Danke vielmals

Antworten auf die Frage(1)

Ihre Antwort auf die Frage