我已经有过Java代码捕获NullPointerException
的实例,但当我try 记录StackTrace(基本上最终调用Throwable.printStackTrace()
)时,我得到的只是:
java.lang.NullPointerException
还有谁见过这个吗?我试着在谷歌上搜索"java空指针空栈跟踪",但没有找到任何类似的东西.
我已经有过Java代码捕获NullPointerException
的实例,但当我try 记录StackTrace(基本上最终调用Throwable.printStackTrace()
)时,我得到的只是:
java.lang.NullPointerException
还有谁见过这个吗?我试着在谷歌上搜索"java空指针空栈跟踪",但没有找到任何类似的东西.
您可能正在使用HotSpot JVM(最初由Sun Microsystems收购,后来被OpenJDK的一部分Oracle收购),它执行大量优化.要回溯堆栈跟踪,需要将选项-XX:-OmitStackTraceInFastThrow
传递给JVM.
优化是,当第一次发生异常(通常是NullPointerException)时,打印完整的堆栈跟踪,并且JVM记住堆栈跟踪(或者可能只记住代码的位置).当该异常发生得足够频繁时,将不再打印堆栈跟踪,这既是为了获得更好的性能,也是为了不用相同的堆栈跟踪淹没日志(log).
以查看这是如何在热点JVM grab a copy of it中实现的,并搜索全局变量OmitStackTraceInFastThrow
.上一次我看代码(2019年)时,它在文件graphKit.cpp中.