java - 没有 StackTrace 的 Java 中的 NullPointerException

标签 java nullpointerexception

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

java.lang.NullPointerException

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

最佳答案

您可能正在使用 HotSpot JVM(最初由 Sun Microsystems,后来被 Oracle 收购,是 OpenJDK 的一部分),它执行了大量优化。要取回堆栈跟踪,您需要将以下选项传递给 JVM:

-XX:-OmitStackTraceInFastThrow

优化的是,当第一次发生异常(通常是NullPointerException)时,会打印完整的堆栈跟踪,并且JVM会记住堆栈跟踪(或者可能只是代码的位置)。当该异常经常发生时,将不再打印堆栈跟踪,既可以实现更好的性能,也不会用相同的堆栈跟踪淹没日志。

要了解这是如何在 HotSpot JVM 中实现的,grab a copy of it并搜索全局变量 OmitStackTraceInFastThrow。上次看代码(2019年),在文件graphKit.cpp .

关于java - 没有 StackTrace 的 Java 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411487/

相关文章:

java - 如何从java中的文本文件中获取行数?

java - 如何在 Java 中隐藏枚举值?

caching - 读取文件内容时出错-MapReduce

java - 在 Hibernate 中添加 Employee 时出现 NullPointerException

scala - 具有值类参数的 Mockito stub 方法因 NullPointerException 而失败

java - 创建对象数组时出现异常

java - 如何创建行之间具有不同背景的警报对话框列表

java - 无法在层次结构中的指定点插入节点[GWT]

java - catch block 中的语句未执行

java - 为什么 IntelliJ IDEA 给出异常建议?