原因:
发现服务器的异常,但没有打印堆栈信息。
[2016-xx-xx 13:04:51]
java.lang.NullPointerException
查看代码,确实是获取了堆栈信息的。
正好别人也遇到这个问题。感谢作者~~
资料 http://blog.csdn.net/bxyz1203/article/details/7713133
昨天财务出现一个问题,线上一直在报错:日志截屏如下:
有异常,但是就只有一个java.lang.NullPointerException异常,这个没有堆栈信息,我怎么查问题呢?后来经过查询,这个问题其实是跟JDK5引入的一个新特性有关,对于一些频繁抛出的异常,JDK为了性能会做一个优化,在JIT重新编译后会抛出没有堆栈的异常。在使用server模式的时候,这个优化是开启的,我们的服务器跑在server模式下并且jdk版本是6,因此在频繁抛出java.lang.NullPointerException异常一定次数后优化开始起作用,只抛出没有堆栈的异常信息了。参考文档:http://java.sun.com/j2se/1.5.0/relnotes.html#hotspot
为了验证,我还简单写了一段代码验证下:
- public class TestLog {
- public static void main(String[] args) {
- int i = 1;
- while (i <= 200000) {
- try {
- Long l = null;
- l.toString();
- } catch (Exception e) {
- if (e.getStackTrace().length == 0) {
- System.out.println("count is" + i);
- break;
- }
- }
- i++;
- }
- }
- }
运行结果:
[fin@vm-crm-dev-144-100 longer]$ java TestLog
count is20708
count is20708
为了能看到堆栈,可以重启服务器再观察,也可以看下以前老的日志。
但是大部分情况下,我们建议还是去掉此优化:通过启动参数中加入:
-XX:-OmitStackTraceInFastThrow
0
5
4
3
3
3
2
1
相关推荐
在使用Myeclipse的过程中,不少用户遇到了一个较为常见的问题:安装Aptana插件之后,每次启动Myeclipse时都会出现`java.lang.NullPointerException`异常提示。尽管这一异常并不影响正常的开发工作,但对于追求完美的...
`Exception`类是Java异常处理的核心,它位于`java.lang`包中,是所有检查型异常(checked exceptions)的基类。当我们遇到程序运行时可能出现的错误或异常情况时,会抛出一个异常对象。在本例中,"Java_Programming_...
4. `fillInStackTrace()`:这个方法用于填充堆栈跟踪信息,当异常实例化时,如果没有显式调用此方法,Java虚拟机会自动填充。 除了基本的异常处理,Java还提供了一些预定义的异常类,如 `IOException`, `...
java.lang.StackOverflowError 是一种堆栈溢出错误,指的是在程序中递归调用的层次太深而导致堆栈溢出时抛出的异常。 29. java.lang.ThreadDeath 线程结束 java.lang.ThreadDeath 是一种线程结束,指的是在程序中...
在Java编程语言中,`NullPointerException` 是一个常见的运行时异常,它发生在试图访问或操作一个值为null的对象引用时。这个异常表示程序试图通过一个null引用调用方法或访问字段,而实际上该引用并没有指向任何...
在Java编程语言中,`java.lang.Throwable`是所有错误(Error)和异常(Exception)的顶级父类,它是Java异常处理机制的核心组成部分。这个类位于`java.lang`包中,是Java标准库的一部分,提供了处理运行时问题的标准...
`java.lang.ExceptionInInitializerError` 是Java编程语言中一种比较特殊的异常,通常在类的静态初始化过程中遇到问题时抛出。这个错误意味着在初始化类的静态变量或静态初始化块(static block)时发生了异常。这类...
- 类层次结构:java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException -> java.lang.NullPointerException - 描述:当尝试使用一个未初始化的对象引用时抛出此异常。这...
在分析“非法访问异常(IllegalArgumentException)”的文本文件时,可能包含了具体的代码示例或异常堆栈跟踪,这些信息对于理解问题的具体原因至关重要。通过分析这些信息,我们可以定位到出错的代码行,并采取相应...
14. **java.lang.CloneNotSupportedException**: 当对象没有实现`Cloneable`接口并且尝试调用`clone()`方法时,会抛出此异常。 15. **java.lang.EnumConstantNotPresentException**: 尝试访问的枚举常量在枚举类型...
这可能是由于多种原因引起的,包括但不限于错误的服务接口调用、不兼容的数据类型、空指针异常(NullPointerException)或者在服务执行过程中遇到的任何未捕获的异常。 Apache Axis2是一个流行的开源Web服务引擎,...
### Java异常总结 #### 一、Java异常类结构体系 Java异常处理机制是基于类的继承体系构建的,其中所有异常类都直接或间接地继承自`Throwable`类。`Throwable`类作为所有异常和错误的基类,提供了错误堆栈实现等一...
在Java中,异常是通过类的实例来表示的,这些类都继承自`java.lang.Throwable`类,它是所有异常和错误的根类。异常分为两种主要类型:Error和Exception。 1. **Error**: - `Error`类是所有错误的基类,通常表示...
当异常不能避免时,应该尽可能在合适的层次处理异常,避免捕获到一个异常后,简单地打印堆栈信息就结束处理,而是应该根据异常的类型和级别进行适当的处理。 异常处理机制的不当使用会导致程序效率降低,例如捕获...
自定义异常类通常带有详细的错误信息和堆栈跟踪,便于调试。 6. 面试题(拓展) - 何时使用checked异常,何时使用unchecked异常? - 如何处理多个可能的异常? - 什么是受检异常和运行时异常的区别? - 为什么...
`java.lang.NullPointerException` `NullPointerException`是当程序尝试访问一个为`null`的对象实例的字段、调用其方法或构造函数时抛出的异常。这种异常通常发生在程序员错误地假设某个引用总是指向一个有效的...
每个异常类都具有`getMessage()`方法,返回关于异常的详细信息,以及`printStackTrace()`方法,用于打印异常发生时的堆栈跟踪信息,这对于调试非常有用。 在实际开发中,我们应遵循一些最佳实践: - 不要忽视异常,...
toString() 方法返回描述当前 Exception 类信息的字符串,而 printStackTrace() 方法在标准输出设备上输出当前异常对象的堆栈使用情况。 系统定义的异常类是 Java 中预定义的一些异常类,用于处理系统运行错误。...
`Throwable`类提供了几个有用的方法,如`printStackTrace()`用于打印异常的堆栈跟踪信息,`getMessage()`返回异常的详细消息,以及`getCause()`获取异常的原因。 通过肖俊老师的指导,深入学习和实践这些异常处理...