没有堆栈跟踪的线程异常

时间:2015-05-18 18:00:24

标签: java multithreading exception-handling

我设置了全局异常处理程序:

Thread.setDefaultUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler());

实现非常简单:

public class DefaultUncaughtExceptionHandler implements UncaughtExceptionHandler {

    public static final Logger logger = LoggerFactory.getLogger(DefaultUncaughtExceptionHandler.class);

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        logger.error("Uncaught Exception detected in thread {}", t, e);
    }

}

有时我会多次在日志中看到这个例外:

[AWT-EventQueue-0] DefaultUncaughtExceptionHandler - Uncaught Exception detected in thread Thread[AWT-EventQueue-0,6,main]
java.lang.ArrayIndexOutOfBoundsException: null

但我无法找到它的来源。

你怎么看,为什么stacktrace是空的?它不应该是空的,所有线程必须至少从父母" main"线程或任何其他。

1 个答案:

答案 0 :(得分:3)

JIT编译器可以进行一些优化并且"丢失"堆栈痕迹。

您可以使用以下JVM标志来禁用此优化:

-XX:-OmitStackTraceInFastThrow

参考: http://jawspeak.com/2010/05/26/hotspot-caused-exceptions-to-lose-their-stack-traces-in-production-and-the-fix/