你可能正在使用HotSpot JVM(最初由Sun Microsystems,后来由Oracle收购,又是OpenJDK的一部分),它执行了很多优化。要获取堆栈跟踪,需要将选项传递
-XX:-OmitStackTraceInFastThrow给JVM。
优化是,当第一次发生异常(通常为NullPointerException)时,将打印完整的堆栈跟踪,并且JVM会记住堆栈跟踪(或者可能只是代码的位置)。当该异常经常发生时,将不再打印堆栈跟踪,这既可以实现更好的性能,又不会使相同的堆栈跟踪充满日志。
要查看在HotSpot JVM中是如何实现的,请获取它的副本并搜索global变量
OmitStackTraceInFastThrow。上一次(在2019年)查看代码时,它在graphKit.cpp文件中。



