Jeśli JVM jest uruchomione z parametrem
-server, to dla często występujących wyjątków mogą zostać obcięte StackTrace'y, np.:
public class NPEnoSTMain {
public static void main(String[] args) {
for (int i = 0; i < 100000; i++) {
try {
((Object) null).hashCode();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}
}
Na początku będzie wyświetlał:
java.lang.NullPointerException
at poligon.NPEnoSTMain.main(NPEnoSTMain.java:8)
a po pewnym czasie już tylko:
java.lang.NullPointerException
Dzieje się tak, gdyż JIT po wykryciu często rzucanego wyjątku zamieni go na preallocated (zcache'owany?) wyjątek - podczas tego procesu jest tracona informacja o StackTrace. Aby temu zapobiec, należy przekazać do JVM parametr:
-XX:-OmitStackTraceInFastThrow
źródło
Brak komentarzy:
Prześlij komentarz