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

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

異常堆棧丟失的解決方法

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

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久夜色精品 | 香蕉成人影院 | 老子影院午夜伦手机不卡6080 | 5g影院天天爽 | 精品一区二区三区视频在线观看免 | 日韩欧美视频在线 | 中文字幕日本在线 | 香蕉视频在线观看www | 99热在线看 | 精品免费久久久久国产一区 | 一区二区三区四区免费视频 | 欧美在线激情视频 | 久久精品亚洲综合一品 | 国产级a爱做片免费观看 | 亚洲精品一区二区三区福利 | 在线观看亚洲国产 | 99精品久久久久中文字幕 | 五月婷婷激情网 | 国产好大好爽久久久久久久 | 国产精品九九视频 | 欧美高清视频www夜色资源网 | 永久免费的啪啪免费的网址 | 99精品视频在线成人精彩视频 | 日本一级毛片a免费播放 | 久久伊人成人 | 神马手机不卡影院 | 国产精品热久久 | 亚洲瑟瑟网 | 99久久99久久精品免费看子伦 | 香蕉在线影院 | 欧美激情在线播放一区二区 | 亚洲精品九色在线网站 | 日本高清不卡码 | 久久精品国产99久久 | 欧美日韩中文一区 | 国产精品爱啪在线线免费观看 | 国产精品爱久久久久久久 | 国产99免费视频 | 456性欧美欧美在线视频 | 久久久无码精品亚洲日韩按摩 | 大学生一级黄色片 |