首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

在循环内Throwable.getMessage()第二次总是返回null的解决办法

2013-05-02 
在循环内Throwable.getMessage()第二次总是返回null的解决方法?最近有多次发现项目的log日志中有很多奇怪

在循环内Throwable.getMessage()第二次总是返回null的解决方法

?

最近有多次发现项目的log日志中有很多奇怪的异常:

Java ArrayIndexOutOfBoundsException: null

一般异常信息应该是:

Java ArrayIndexOutOfBoundsException: -1

?

开始没太注意,后来多次碰到后觉得这样下去不是办法,上线后还出现这种问题那就麻烦大了,所以决定今天已经要解决掉。

?

为了什么会有null的信息呢,后面调试发现,第一次执行都是完整的很长的堆栈信息,但相同位置出现第二次异常时,堆栈就很短,而且e.getMessage()返回null,我以为是我jdk版本升级到1.7的原因(怀疑最近JDK对异常做了优化),切换到1.6还是出现这种情况,后来在网上找了很多答案,终于找到了确切原因,那就是JIT对循环内的异常堆栈进行了优化。

?

原文:http://stackoverflow.com/questions/6538792/why-does-throwable-getmessage-occasionally-return-null

?

Found the answer on a?similar question.

The JIT compiler will optimize away stack traces in certain exceptions if they happen enough.

The JVM flag -XX:-OmitStackTraceInFastThrow prevents this behavior and seems to fix the flickering unit tests.

?

热点排行