黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 異常堆棧丟失的解決方法

異常堆棧丟失的解決方法

更新時間:2021-08-23 11:52:51 來源:動力節點 瀏覽2101次

登陸服務器進行例行的檢查,發現異常日志文件里有很多nullPointException,只有簡單的異常名稱,卻沒有堆棧信息。沒有異常堆棧,無法定位錯誤,也就不能修改了。

正確的解決方法是增加一個VM Options:-XX:-OmitStackTraceInFastThrow。這個參數的好處如下:

“JVM對一些特定的異常類型做了Fast Throw優化,如果檢測到在代碼里某個位置連續多次拋出同一類型異常的話,C2會決定用Fast Throw方式來拋出異常,而異常Trace即詳細的異常棧信息會被清空。這種異常拋出速度非常快,因為不需要在堆里分配內存,也不需要構造完整的異常棧信息。”

這個參數,支持的異常類型如下:

NullPointerException

ArithmeticException

ArrayIndexOutOfBoundsException

ArrayStoreException

ClassCastException

通過這個方案,開啟輸出空指針錯誤,很快就定位問題,并解決了。

解決問題后,進行了一番的測試和驗證,如下:

問題驗證

在異常出現5000次以上時,才會丟失堆棧信息。在6600多次的時候丟失堆棧信息,但是并不穩定。代碼如下:

public class JavaNPE extends Thread {
    private static int count = 0;
    @Override
    public void run() {
        try {
            System.out.println("getSimpleName is:"+this.getClass().getSimpleName() + " execute count:" + (++count));
            String str = null;
            System.out.println(str.length());        } catch (Throwable e) {
            e.printStackTrace();        }    }}public class TestFastThrow {
    public static void main(String[] args) throws InterruptedException {
        JavaNPE javaNPE = new JavaNPE();
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            executorService.execute(javaNPE);            //防止打出的日志太快
            Thread.sleep(2);
        }
    }
}

這是一個多線程的程序,寫單線程的測試程序,是否可行呢?于是就嘗試了第一版,代碼如下:

public static void main(String args[]) {
        for (int i = 0; i < 10000; i++) {
            try {
                String value = null;
                value.substring(0, 100);
            } catch (Exception ex) {
                ex.printStackTrace();            }        }    }

但是,很遺憾,這個程序的異常堆棧信息并不會丟失。程序修改如下:

public void method2() {
        String value = null;
        value.substring(0, 100);
    }    public static void main(String args[]) {
        ExceptionTest exceptionTest = new ExceptionTest(1);
        for (int i = 0; i < 10000; i++) {
            try {
                exceptionTest.method2();            } catch (Exception ex) {
                ex.printStackTrace();            }        }    }

這個程序在第5530~5550次的時候,會丟失異常堆棧信息,是不穩定的。分析上述兩段單線程的測試代碼,第一段因為異常信息沒有到方法的外面,jvm不能追蹤到異常堆棧信息,所以并不會起作用。

以上就是動力節點小編介紹的"異常堆棧丟失的解決方法",希望對大家有幫助,想了解更多可查看Java堆棧。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产亚洲精品仙踪林在线播放 | 国产高清视频免费 | 寡妇一级a毛片免费播放 | 波多野吉衣在线多野结衣 | 国产成人精品cao在线 | 人成在线免费视频 | 成人在线免费看 | 成人免费高清 | 精品午夜视频 | 欧美日韩中文字幕 | 国产日韩一区二区三区在线播放 | 成人激情开心网 | 又长又深又硬又黄又猛又爽 | 国产h在线播放 | 农村寡妇一级毛片免费播放 | 欧美特黄一免在线观看 | 最近中文国语字幕在线播放视频 | 日韩精品午夜视频一区二区三区 | 色偷偷91久久综合噜噜噜噜 | 免费一级特黄a | 欧美成人午夜视频 | 特级黄a三级三级三级 | a级毛片免费观看在线播放 a级毛片免费完整视频 | 91短视频免费在线观看 | 狠狠干狠狠干 | 日本福利写真福利视频 | 日韩一区二区三区不卡 | 激情网站在线观看 | 夜夜操天天爽 | 欧美日韩一区二区三区视频 | 国产成年人视频 | 欧美黑人巨大性极品hd | 天天做天天爱天天干 | 国产片18在线观看 | 未成人禁止视频高清在线观看 | 国产精品伦子一区二区三区 | 涩涩视频免费看 | 一级做a免费视频观看网站 一男一女下面一进一出性视频 | 日韩欧美中文字幕出 | 日本三级韩国三级三级a级按摩 | 日韩免费视频在线观看 |