最近上的项目bug很多,服务器经常爆java.lang.NullPointerException,但是却没有打印在哪行抛出这个异常。原来这是JVM在server模式下做的性能优化。可以通过加参数-XX:-OmitStackTraceInFastThrow来禁止这种优化。
测试代码:
package com.nexusy.test;
public class Test {
public static void main(String[] args) {
int num = 0;
for (int i = 0; i < 20000; i++) {
try {
String o = null;
o.toString();
} catch (Exception e) {
if(e.getStackTrace().length == 0){
e.printStackTrace();
num++;
}
}
}
System.err.println(num++);
}
}
如果不是在服务器上,需指定JVM为服务器模式:java -server com.nexusy.test.Test
当代码中第九行类型为Object以及自定义类型,JVM不会进行优化,当为String,Long,Integer等类型,则会进行优化。根据参考资料,所有”cold” built-in exceptions会进行优化,但是什么是”cold” built-in exceptions?
参考资料:http://java.sun.com/j2se/1.5.0/relnotes.html#hotspot
分享到:
相关推荐
本主题聚焦于如何编写一个内核模块来打印指定进程的栈信息,这对于调试和理解系统行为非常有用。我们将深入探讨Linux内核、进程管理以及如何在内核模块中实现这一功能。 首先,了解Linux内核模块的基本结构至关重要...
Java如何自定义异常打印非堆栈信息详解 Java中的异常处理是编程语言中非常重要的一部分,正确地处理异常可以避免程序的崩溃和错误,而自定义异常打印非堆栈信息则是Java中异常处理的一种重要机制。本文将详细介绍...
为了解决这个问题,我们可以编写一个全局的异常处理器,该处理器在异常发生时捕获异常,并在控制台上打印详细的堆栈跟踪信息。在C++中,可以使用`set_unexpected`和`set_terminate`函数注册自定义的异常处理函数;在...
在Microsoft Visual C++ (VC) 开发环境中,打印当前调用堆栈信息是一个非常有用的调试技巧,它可以帮助开发者追踪程序执行流程,理解函数调用顺序,尤其是在遇到异常或错误时。下面将详细介绍如何在VC中实现这个功能...
JVM 优化机制可能会导致log4j 不打印异常堆栈,但是这并不意味着我们不能获取异常堆栈信息。通过禁用 JVM 优化机制,我们可以获取完整的异常堆栈信息。 知识点6: log4j 配置的重要性 log4j 的配置对日志记录的...
为了解决这个问题,Spring Boot引入了`FailureAnalyzer`接口,帮助开发者详细地分析并打印出启动时的异常堆栈信息。 `FailureAnalyzer`接口位于`org.springframework.boot.diagnostics`包下,它只有一个方法`...
在SpringBoot应用中,日志记录是至关重要的,特别是在处理异常时,清晰、精简的异常堆栈信息有助于快速定位问题。本文将详细介绍如何利用logback优化SpringBoot应用中的异常堆栈输出,以提高日志的可读性和实用性。 ...
源码可能包含如何获取和遍历所有线程ID(TIDs)的方法,以便为每个线程打印栈信息。 3. **进程内存布局**:了解进程内存布局,包括堆、栈、全局变量、动态库等区域,对于正确解析栈信息是必要的。 4. **栈帧解析**...
异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次创给其调用者……直至最后传到 main 方法,如果 main 方法依然没有处理该异常,JVM 会中止该程序,并打印异常的跟踪栈信息。...
在项目中,正确使用异常打印方法是非常重要的,但是在实际开发中,一些童鞋可能没有正确使用异常打印方法,导致项目的后台日志中没有收到日志或者日志信息不完整等情况的发生。 Java异常结构分析: Java中的...
SpringBoot 打印启动时异常堆栈信息详解 SpringBoot 是一个流行的 Java 框架,用于快速构建生产级别的应用程序。然而,在项目启动时,如果遇到异常,SpringBoot 并不能友好地打印出具体的堆栈错误信息,而只能查看...
printStackTrace() 方法是Throwable 对象的一个方法,用于打印异常栈信息。该方法可以将异常栈信息打印到控制台或日志文件中。 ```java public static String getStackTrace(Throwable t) { StringWriter sw = new...
这个对象包含了关于异常的详细信息,如错误类型和发生时的程序状态。 ### 异常处理的益处 使用异常处理有几大优势: 1. **清晰分离错误代码**:异常处理允许程序员将错误处理代码与正常逻辑代码分离,提高了代码...
在 Java 中,Exception 类提供了一组方法用来获取异常的一些信息,例如 printStackTrace() 方法,可以打印出异常的跟踪栈信息。 下面是 Java 异常机制的继承层次结构图: * Throwable + Error + Exception - ...
打印栈轨迹的方法 #### (1) `printStackTrace()` `printStackTrace()`方法是用于打印异常对象的栈轨迹信息。它默认将信息输出到标准错误流(System.err)。例如: ```java try { // 代码引发异常 } catch ...
- `OutStack` 遍历并打印栈中的所有元素。 - `setEmpty` 清空栈,将栈顶位置设回-1。 对于链式栈,我们需要维护一个头节点,用于方便插入和删除操作。 【算法分析】 1. **时间复杂度**:在顺序栈中,入栈、出栈、...
- 不要在`catch`块中仅仅打印错误信息,应尝试处理或记录异常,以便于调试和问题定位。 - 适当使用`throws`关键字声明方法可能抛出的异常,让调用者知道需要处理这些异常。 异常处理是软件开发中的核心概念,它...
•异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出 结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程。 •面向对象的应用程序运行时,经常会发生一系列方法...
### 栈类模板C++代码解析与应用 #### 核心知识点概述 本文将深入解析一个C++中的栈类模板实现,并通过实例...需要注意的是,在实际应用中可能需要根据具体需求对栈的容量、异常处理等方面进行更详细的定制和优化。
这段代码创建了一个整数类型的栈,然后压入三个数字,接着查看栈顶元素,输出栈的元素数量,最后弹出栈顶元素并打印。 通过这个简单的C#栈类实现,我们可以看到栈的基本操作是如何在实际代码中实现的。这不仅有助于...