`
lanhuidong
  • 浏览: 226296 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

异常没有打印栈信息

    博客分类:
  • Java
阅读更多

最近上的项目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

分享到:
评论

相关推荐

    程序崩溃自动重启以及将未捕获到的异常写退出栈

    为了解决这个问题,我们可以编写一个全局的异常处理器,该处理器在异常发生时捕获异常,并在控制台上打印详细的堆栈跟踪信息。在C++中,可以使用`set_unexpected`和`set_terminate`函数注册自定义的异常处理函数;在...

    Java如何自定义异常打印非堆栈信息详解

    Java如何自定义异常打印非堆栈信息详解 Java中的异常处理是编程语言中非常重要的一部分,正确地处理异常可以避免程序的崩溃和错误,而自定义异常打印非堆栈信息则是Java中异常处理的一种重要机制。本文将详细介绍...

    linux kernel module打印指定进程栈信息

    本主题聚焦于如何编写一个内核模块来打印指定进程的栈信息,这对于调试和理解系统行为非常有用。我们将深入探讨Linux内核、进程管理以及如何在内核模块中实现这一功能。 首先,了解Linux内核模块的基本结构至关重要...

    VC中打印当前调用堆栈信息实例

    在Microsoft Visual C++ (VC) 开发环境中,打印当前调用堆栈信息是一个非常有用的调试技巧,它可以帮助开发者追踪程序执行流程,理解函数调用顺序,尤其是在遇到异常或错误时。下面将详细介绍如何在VC中实现这个功能...

    浅谈log4j 不打印异常堆栈

    JVM 优化机制可能会导致log4j 不打印异常堆栈,但是这并不意味着我们不能获取异常堆栈信息。通过禁用 JVM 优化机制,我们可以获取完整的异常堆栈信息。 知识点6: log4j 配置的重要性 log4j 的配置对日志记录的...

    Spring Boot详细打印启动时异常堆栈信息详析

    为了解决这个问题,Spring Boot引入了`FailureAnalyzer`接口,帮助开发者详细地分析并打印出启动时的异常堆栈信息。 `FailureAnalyzer`接口位于`org.springframework.boot.diagnostics`包下,它只有一个方法`...

    linux下打印线程栈工具源码

    源码可能包含如何获取和遍历所有线程ID(TIDs)的方法,以便为每个线程打印栈信息。 3. **进程内存布局**:了解进程内存布局,包括堆、栈、全局变量、动态库等区域,对于正确解析栈信息是必要的。 4. **栈帧解析**...

    Java异常跟踪栈定义与用法示例

    异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次创给其调用者……直至最后传到 main 方法,如果 main 方法依然没有处理该异常,JVM 会中止该程序,并打印异常的跟踪栈信息。...

    Java中异常打印输出的常见方法总结

    在项目中,正确使用异常打印方法是非常重要的,但是在实际开发中,一些童鞋可能没有正确使用异常打印方法,导致项目的后台日志中没有收到日志或者日志信息不完整等情况的发生。 Java异常结构分析: Java中的...

    SpringBoot打印启动时异常堆栈信息详解

    SpringBoot 打印启动时异常堆栈信息详解 SpringBoot 是一个流行的 Java 框架,用于快速构建生产级别的应用程序。然而,在项目启动时,如果遇到异常,SpringBoot 并不能友好地打印出具体的堆栈错误信息,而只能查看...

    浅析java异常栈

    printStackTrace() 方法是Throwable 对象的一个方法,用于打印异常栈信息。该方法可以将异常栈信息打印到控制台或日志文件中。 ```java public static String getStackTrace(Throwable t) { StringWriter sw = new...

    在SpringBoot中使用logback优化异常堆栈的输出.doc

    在SpringBoot应用中,日志记录是至关重要的,特别是在处理异常时,清晰、精简的异常堆栈信息有助于快速定位问题。本文将详细介绍如何利用logback优化SpringBoot应用中的异常堆栈输出,以提高日志的可读性和实用性。 ...

    C+ + VC+ + 语言的异常及其处理方法

    这个对象包含了关于异常的详细信息,如错误类型和发生时的程序状态。 ### 异常处理的益处 使用异常处理有几大优势: 1. **清晰分离错误代码**:异常处理允许程序员将错误处理代码与正常逻辑代码分离,提高了代码...

    异常处理.ppt异常处理.ppt异常处理.ppt异常处理.ppt异常处理.ppt

    - 不要在`catch`块中仅仅打印错误信息,应尝试处理或记录异常,以便于调试和问题定位。 - 适当使用`throws`关键字声明方法可能抛出的异常,让调用者知道需要处理这些异常。 异常处理是软件开发中的核心概念,它...

    深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)

    在 Java 中,Exception 类提供了一组方法用来获取异常的一些信息,例如 printStackTrace() 方法,可以打印出异常的跟踪栈信息。 下面是 Java 异常机制的继承层次结构图: * Throwable + Error + Exception - ...

    解析Java异常的栈轨迹及其相关方法

    打印栈轨迹的方法 #### (1) `printStackTrace()` `printStackTrace()`方法是用于打印异常对象的栈轨迹信息。它默认将信息输出到标准错误流(System.err)。例如: ```java try { // 代码引发异常 } catch ...

    【09-异常处理】

    •异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出 结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程。 •面向对象的应用程序运行时,经常会发生一系列方法...

    数据结构实验栈和队列详细实验报告

    - `OutStack` 遍历并打印栈中的所有元素。 - `setEmpty` 清空栈,将栈顶位置设回-1。 对于链式栈,我们需要维护一个头节点,用于方便插入和删除操作。 【算法分析】 1. **时间复杂度**:在顺序栈中,入栈、出栈、...

    栈类模板C++代码

    ### 栈类模板C++代码解析与应用 #### 核心知识点概述 本文将深入解析一个C++中的栈类模板实现,并通过实例...需要注意的是,在实际应用中可能需要根据具体需求对栈的容量、异常处理等方面进行更详细的定制和优化。

    c#栈的操作的代码实现

    这段代码创建了一个整数类型的栈,然后压入三个数字,接着查看栈顶元素,输出栈的元素数量,最后弹出栈顶元素并打印。 通过这个简单的C#栈类实现,我们可以看到栈的基本操作是如何在实际代码中实现的。这不仅有助于...

Global site tag (gtag.js) - Google Analytics