Normalnie wolę kontrolę zerową. Ale w bieżącym scenariuszu wiem, że przez większość czasu mój warunek if przejdzie i jest kilka uzasadnionych scenariuszy, w których obiekt może być pusty.Kontrola zerowa vs próba/przechwytywanie, gdy 99% obiektu czasu nie jest zerowe
Również obciążenie jest ogromny (około 5 milionów połączeń/godzina)
Teraz próbuje znaleźć sposób, który jest lepszy z punktu widzenia wydajności. Już sprawdziłem: try/catch vs null check in java, ale moja sprawa jest wyjątkowa.
Sprawdzono również pod numerem Which is faster, try catch or if-else in java (WRT performance), ale zarówno ten, jak i jeden, występują w ogólnym kontekście, w którym znajomość współczynnika pass/fail nie jest dostępna.
public void process(Job job) {
//... some code which processes job
SubJob subJob = job.getSubJob();
if(subJob != null) { // 99% of the time this will pass
//.. do something
}
}
try/catch wersja
public void process(Job job) {
//... some code which processes job
SubJob subJob = job.getSubJob();
try {
//.. do something
}catch(NullPointerException e) { //This may occure only 1% of the time.
//...
}
}
Aktualizacja:
Zwycięzca jest null check. W Try/catch, wewnętrznie JVM zrobi NULL check i wyrzuci NPE i tak dalej, poza tym obsługa wyjątków w JVM (tworzenie stosu itp.) Będzie narzutem. Podobnie jak w przypadku innej odpowiedzi, współczesne procesory są wystarczająco inteligentne, aby obsłużyć ten scenariusz z dobrymi prognozami, które w moim unikalnym przypadku zawsze będą działały na korzyść.
Napisałem również program (opublikowany poniżej pod moim imieniem), a wyniki wyraźnie wskazują, że zerowa kontrola jest znacznie lepsza na moim procesorze AMD.
Dziękuję ludziom za kierowanie mną.
5 milionów połączeń na godzinę wynosi mniej niż 1400 połączeń na po drugie, a kontrola zerowa prawdopodobnie zajmuje tylko kilka dziesiątek mikrosekund. Jaki występ widziałeś, gdy porównałeś te dwa? –
Dlaczego nie możesz tego przetestować i dowiedzieć się ... – brso05
Powinieneś być w stanie ustawić test, aby porównać dwie metody i zobaczyć, który z nich jest bardziej wydajny. – brso05