Java中无StackTrace的NullPointerException

我已经有Java代码实例捕获了一个NullPointerException,但是当我尝试记录StackTrace时(基本上是调用Throwable.printStackTrace()),我得到的只是:

java.lang.NullPointerException

还有其他人见过这个吗?我尝试在谷歌上搜索“java空指针空堆栈跟踪”,但没有遇到类似的情况

您可能正在使用HotSpot JVM(最初由Sun Microsystems提供,后来由Oracle(OpenJDK的一部分)购买),它执行大量优化。要获取堆栈跟踪,需要将选项-XX:-OmitStackTraceInFastThrow传递给JVM

优化是当第一次发生异常(通常是NullPointerException)时,打印完整的堆栈跟踪,JVM记住堆栈跟踪(或者可能只是代码的位置)。当异常发生得足够频繁时,将不再打印堆栈跟踪,这样既可以获得更好的性能,也可以避免日志中充斥相同的堆栈跟踪

要了解这是如何在HotSpot JVM中实现的,获取它的副本并搜索全局变量省略StackTraceInFastThrow。上次我查看代码时(2019年),它位于文件graphKit.cpp

发表评论