当前位置: 首页 > 面试题库 >

Java中没有StackTrace的NullPointerException

濮阳默
2023-03-14
问题内容

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

java.lang.NullPointerException

还有其他人遇到吗?我尝试谷歌搜索“ java空指针空堆栈跟踪”,但没有遇到这样的事情。


问题答案:

你可能正在使用HotSpot JVM(最初由Sun Microsystems,后来由Oracle收购,又是OpenJDK的一部分),它执行了很多优化。要获取堆栈跟踪,需要将选项传递-XX:-OmitStackTraceInFastThrow给JVM。

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

要查看在HotSpot JVM中是如何实现的,请获取它的副本并搜索global变量OmitStackTraceInFastThrow。上一次(在2019年)查看代码时,它在graphKit.cpp文件中。



 类似资料:
  • 问题内容: 我有一个来自客户的错误,当我查看日志时,我们跟踪异常,某些堆栈跟踪没有行号: 请注意:我已将包名称替换为“ xx”),并且所有类和方法均在我们的应用程序中定义: 完整的堆栈跟踪如下: 我对为什么会发生这样的事情很感兴趣,我的客户是否有可能对现有代码(自定义)进行某些处理? 问题答案: 不显示行号的代码是在没有调试信息的情况下编译的。

  • 问题内容: 我想读取捕获的异常的完整堆栈跟踪。 例如: 我想阅读“ … 23更多”,以了解异常的来源。 问题答案: 答案很简单,这些行已经在stacktrace中了:) 基本上,以下情况正在发生:

  • 如果某些代码返回future并确定future应返回“错误”或“异常”,如何将堆栈跟踪传递给

  • 问题内容: 在进行了整个“企业”编程一段时间之后,我对语言本身感到非常失望,如果不得不回到它上面,总是会感到很受阻。您平均的Android应用程序的项目规模并不太令人生畏,并且库的编码风格实际上非常不错,但是如果我可以避免使用Java,我肯定会这样做。 这就是问题:我可以避免吗?尽管有很多JVM语言可以在台式机和服务器上选择,但是Dalvik VM和设备本身存在一些限制。使用JIT在2.2中似乎更

  • 问题内容: 本文介绍如何在Java VisualVM中查看内存分配堆栈跟踪:http : //rejeev.blogspot.de/2009/04/analyzing-memory-leak-in- java.html 简而言之,请在Java VisualVM选项中定义一个自定义预设,然后选中 “ 内存设置”选项卡中的 “记录分配堆栈跟踪”复选框 。 现在,当我选择该自定义预设并开始内存分析时,我

  • 当前logback.xml 当前结果: 我想要结果: