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

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

異常堆棧丟失的解決方法

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

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 99久久网站 | 青青青国产深夜福利视频 | 久久精品在现线观看免费15 | 久久精品国产亚洲精品 | 欧美一级二级aaa免费视频 | 欧美久久网| 97视频在线观看免费视频 | 欧美在线观看高清一二三区 | 亚洲春色综合另类网蜜桃 | 国产成人综合精品一区 | 一级毛片视频播放 | 四虎精品永久免费 | 韩国精品一区 | 精品视频久久久久 | 久青草视频在线 | 中文字幕在线日本 | 97精品国产综合久久久久久欧美 | 国产成人综合亚洲欧洲色就色 | 深夜福利视频在线一区 | 黄页网站 播放器 日本 | 色八戒国产一区二区三区四区 | 国产69精品久久久久99不卡 | 国产成人免费视频精品一区二区 | 欧美成人天天综合天天在线 | 四虎免费在线播放 | 国产精品久久影院 | 九天玄帝诀免费完整观看 | 狼人久久尹人香蕉尹人 | 精品亚洲一区二区三区在线播放 | 国产成人在线看 | 激情影院在线 | 欧美日韩在线播一区二区三区 | 99亚洲| 免费观看欧美成人禁片 | 国自产拍在线天天更新91 | 色偷偷亚洲第一成人综合网址 | 四虎黄网 | 国产青草| 日韩久久一级毛片 | 久久精品国产日本波多麻结衣 | 亚洲国产精品区 |