`
aigo
  • 浏览: 2645757 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

在循环内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.

 

  • 大小: 47.2 KB
分享到:
评论

相关推荐

    spring-控制事物回滚

    在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式处理应用中的事务。本文将深入探讨“spring-控制事物回滚”这一主题,结合标签“源码”和“工具”,我们将从源代码层面理解Spring如何...

    软件测试用例方法总结

    测试用例设计是软件测试的关键环节,其目的是为了有效地找出软件中的错误和缺陷。本文将深入探讨等价类划分方法,这是一种广泛...在实际应用中,结合其他测试方法如边界值分析、决策表法等,可以进一步提升测试效果。

    捕获Throwable和捕获Exception的区别验证

    System.out.println("捕获到了Throwable: " + e.getMessage()); } } } // 测试捕获Exception new TestClass().testFunction(); // 测试捕获Throwable new TestClass().testFunction(); ``` 在上面的示例中,...

    xUtils3 demo

    //Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show(); if (ex instanceof HttpException) { // 网络错误 HttpException httpEx = (HttpException) ex; int responseCode = httpEx.getCode();...

    java简单查询天气

    System.err.println("Error occurred: " + throwable.getMessage()); return null; }); } } ``` 在上面的代码中,我们向OpenWeatherMap API发送了一个GET请求,其中包含城市名(北京)和API密钥。`HttpResponse...

    软件测试用例编写资料汇总

    在软件开发过程中,测试用例的编写是质量保证的关键环节,尤其...通过深入理解和实践这些知识,初学者能够建立起一套完整的软件测试用例编写体系,从而在实际工作中有效地找出并解决软件的问题,保障产品的高质量发布。

    解析Java中所有错误和异常的父类java.lang.Throwable

    在Java编程语言中,`java.lang.Throwable` 是所有错误(Error)和异常(Exception)的顶级父类,它是异常处理机制的基础。`Throwable` 类提供了封装异常信息的方法和属性,使得开发者能够对程序中出现的问题进行捕获...

    jquery.throwable:使HTML元素可抛出的JQuery插件

    jquery.throwable:使HTML元素可抛出的JQuery插件

    Jboss启动报Failed to parse WEB-INFweb.xml; - nested throwable错误

    - nested throwable错误解决方案 在Jboss应用服务器中,启动报错Failed to parse WEB-INF/web.xml; - nested throwable是一种常见的错误,本文将对此错误进行深入分析,并提供解决方案。 错误原因 Jboss应用...

    Java软件开发实战 Java基础与案例开发详解10-6 getMessage和printStackTrace方法共6页.pdf

    - 功能说明:该方法用于返回`Throwable`对象的详细消息字符串。 - 用法示例: ```java try { int i = 12 / 0; // 除以零错误 } catch (Exception ex) { System.out.println(ex.getMessage()); } ``` - ...

    RxJava和Retrofit2的统一处理单个请求示例详解

    Log.v("LinNetError", throwable.getMessage()); callBack.onFailure(ExceptionHandle.handleException(throwable)); return null; } }) // 订阅并处理请求结果 .subscribe(new Subscriber<BaseResponse<T>>...

    throwable 和 exception区别

    java Exception中Throwable和Exception之间的区别

    在Java中异常分析

    - 在访问数组元素之前,检查索引是否合法(通常是在数组的长度范围内)。 - 使用循环时,注意循环边界条件。 ##### 5. `java.lang.IllegalArgumentException` - **异常路径**:`java.lang.Object -> java.lang....

    spring的Aop中的前置通知,后置通知以及环绕通知简单代码

    System.out.println("异常后通知:在方法抛出异常后运行:" + ex.getMessage()); } } ``` **3. 环绕通知(Around Advice)** 环绕通知是最强大的通知类型,它在方法调用前后都可以执行自定义逻辑,甚至可以决定...

    JSP内置对象使用说明.doc

    out.println("字符编码转换错误:" + e.getMessage()); } ``` 3.Response对象类:HttpServletResponse Response对象代表服务器对客户端的响应,主要用来设置响应头、响应状态以及向客户端发送数据。例如,设置...

    Android实现MQTT推送服务Android工程代码

    在Android平台上实现MQTT(Message Queuing Telemetry Transport)推送服务是一项常见的任务,尤其是在构建实时通信的应用中。MQTT是一种轻量级的发布/订阅消息协议,非常适合资源有限的设备和低带宽、高延迟的网络...

    [Android实例] MQTT消息推送,即时通讯

    Log.e("MQTT", "Connection failed: " + exception.getMessage()); } }); ``` 5. 订阅主题 使用`subscribe()`方法订阅感兴趣的MQTT主题: ```java client.subscribe("your/topic", 0, null, new ...

    android异步请求网络代码

    在`doInBackground()`方法中执行网络请求,然后在`onPostExecute()`方法中处理返回的数据。下面是一个简单的`AsyncTask`例子: ```java private class NetworkRequestTask extends AsyncTask, Void, String> { @...

    前置后置环绕异常通知

    System.out.println("异常通知:捕获的异常信息:" + e.getMessage()); } ``` 5. **环绕通知**: 环绕通知是最强大的通知类型,它允许在方法调用前后执行自定义的行为,包括控制方法的执行是否继续。环绕通知使用`...

    实现Eclipse自身的log管理

    logError(null, t.getMessage(), t); } public static void logError(String bundleID, Throwable t) { logError(bundleID, t.getMessage(), t); } public static void logError(String bundleID, String ...

Global site tag (gtag.js) - Google Analytics