异常日志打印不全-XX:+OmitStackTraceInFastThrow

异常日志打印不全-XX:+OmitStackTraceInFastThrow,第1张

异常日志打印不全-XX:+OmitStackTraceInFastThrow
I.起因

生产环境发现公共代码中日志打印只有,没有详细的堆栈信息。
java.lang.NullPointerException

正常情况1.8 -XX:+OmitStackTraceInFastThrow 默认已开启,会优化掉相同异常栈信息。

II.问题


以下代码本地无法复现该异常:


        List list = new ArrayList();
        for (int j = 0; j < 11000; j++) {
            try {
                list.get(-1);
            } catch (Exception ex) {
                int length = ex.getStackTrace().length;
                System.out.println(String.format("报错异常 :: %s, 堆栈长度 :: %s   %s", ex, length,j));
            }
        }


启动参数

"D:Program Files (x86)Javajdk1.8.0_144binjava.exe" -Dfile.encoding=UTF-8 -classpath C:UsersAdministratorAppDataLocalTempclasspath71073870.jar com.ding.study.util.TestMain

 

III.问题排查


查看hotspot相关代码
http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/tip/src/share/vm/opto/graphKit.cpp

 

只有 ProfileTraps=true 才会执行热代码等判断。

 

本机默认使用client模式,ProfileTraps 在c1模式下 默认是false,所以不会触发.

 

IV.问题解决

Idea 启动增加配置
Modify options >add VM options > 增加 -server

 

总结:

client模式下 默认并未开启OmitStackTraceInFastThrow 

开启
-XX:+OmitStackTraceInFastThrow

关闭
-XX:-OmitStackTraceInFastThrow

http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/tip/src/share/vm/opto/graphKit.cpp


 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5691162.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存