[Java] Wyjątki bez stosu wywołań jako metoda optymalizacji krytycznych sekcji programu.

Celem tego wpisu jest opisanie dość ekstremalnej techniki optymalizacji krytycznych sekcji programu w kodzie Javy jaką są bezstosowe wyjątki. Co nie jest chyba dla nikogo zaskoczeniem, główny koszt związany z generowaniem i przetwarzaniem wyjątku jest spowodowany przez konieczność zapamiętania stosu wywołań z momencie generacji wyjątku. Okazuje się, że odpowiadającą za to metodę Throwable.fillInStackTrace() można napisać uzyskując wyjątki pozbawione informacji o stosie wywołań.



Tego typu wyjątki są powszechnie wykorzystywane np. w implementacji Groovy, przykładem niech będzie klasa MissingMethodExceptionNoStack. Innym miejscem , gdzie bezstosowe wyjątki wykorzystywane są jako metoda optymalizacji jest sama JVM która potrafi wykorzystywać prealokowane wbudowane wyjątki (-XX:+OmitStackTraceInFastThrow).

Innym sposobem zmniejszenia kosztu związanego z generacją wyjątku jest zastosowanie opcji -XX:MaxJavaStackTraceDepth która pozwala ustawić maksymalną głębokość stosu wywołań związanego z wyjątkiem, np -XX:MaxJavaStackTraceDepth=100

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s