大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

異常堆棧丟失的解決方法

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

登陸服務器進行例行的檢查,發現異常日志文件里有很多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編程,感興趣的同學可以關注一下。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 天天色天天综合网 | 亚洲毛片在线看 | 精品欧美一区二区三区在线观看 | 2021国产精品自产拍在线观看 | 日本精品在线视频 | 免费的黄色网 | 久久国产精品亚洲综合 | 成人欧美精品一区二区不卡 | 999资源| 免费福利小视频 | 天天舔天天插 | 中文字幕一区婷婷久久 | 手机看片高清国产日韩片 | 高清一区二区三区免费 | 免费在线一级毛片 | 国产成人禁片在线观看 | 久久久久无码国产精品一区 | 久久99一区 | 深夜影院在线观看 | 吃奶japanesevideo 处videossex第一次中 | 久久久久久久尹人综合网亚洲 | 日本在线毛片视频免费看 | 天天在线干 | 搡的我好爽视频在线观看 | 成人夜夜 | 成人性生活视频 | 黄页成人免费网站 | sss欧美华人整片在线观看 | 亚洲精品乱码久久久久 | 私人影院aaaaa毛片 | 天天躁狠狠躁 | 九九视频在线观看6 | 九九精品视频在线免费观看 | 精品国产日韩亚洲一区91 | 欧美中文网 | 夜夜夜夜夜夜夜工噜噜噜 | 午夜看一级特黄a大片黑 | 欧美乱淫视频 | 看久久| 亚洲啪视频| 极品美女一级毛片免费 |