欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂告訴你Java程序在什么情形下會掛掉

2018-03-13 16:31:34 1825瀏覽

        小編想問一下大家知不知道Java程序在什么情形下會掛掉?有哪些小伙伴曾經(jīng)碰到過Java程序掛掉的情況?本篇文章扣丁學(xué)堂Java培訓(xùn)機(jī)構(gòu)小編就和讀者們一塊來看一下這個(gè)問題。



扣丁學(xué)堂告訴你Java程序在什么情形下會掛掉



        在本例中,先初始化了一個(gè)map,然后用一個(gè)無限循環(huán)將一些鍵值對插入到map里面:


        class Wrapper {

public static void main(String args[]) throws Exception {

        Map map = System.getProperties();

        Random r = new Random();

        while (true) {

        map.put(r.nextInt(), "value");

        }

        }

        }


        你可能也猜到了,這段代碼編譯執(zhí)行后無法正常結(jié)束。當(dāng)我用這組參數(shù)啟動的話:

        java -Xmx100m -XX:+UseParallelGC Wrapper


        我會在終端中看到java.lang.OutOfMemoryError: GC overhead limit exceeded的異常信息。不過如果我調(diào)整一下堆大小或者是GC的類型的話,在我的Mac OS X 10.9.2 系統(tǒng)上用Oracle Hotspot JDK 1.7.0_45來運(yùn)行,就會出現(xiàn)不同的情況。


        比如說,我用一個(gè)較小的堆來運(yùn)行這個(gè)程序,就像下面這樣:


        java -Xmx10m -XX:+UseParallelGC Wrapper


        應(yīng)用程序會拋出一段大家更熟悉的錯誤信息然后掛掉:java.lang.OutOfMemoryError: Java heap space。


        如果你換成ParallelGC以外的GC策略的話,比如說-XX:+UseConcMarkSweepGC or -XX:+UseG1GC,你將會看到由默認(rèn)的異常處理器所拋出的異常,并且你看不到堆棧信息了,因?yàn)槎岩呀?jīng)沒有空間了,甚至連異常的堆棧信息都沒法填充了,因此它在創(chuàng)建異常的時(shí)候就掛掉了:


         My Precious:examples vladimir$ java -Xmx100m -XX:+UseConcMarkSweepGC Wrapper

        Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"


        這說明了什么?當(dāng)資源緊缺的時(shí)候,你根本沒法判斷你的應(yīng)用程序是怎么掛掉的,因此不要指望能出現(xiàn)你所預(yù)期的一系列錯誤提示。從上面這個(gè)例子中可以看到,你的程序可能會以三種完全不同的方式掛掉:


        GC的安全性檢查失?。阂坏?span>GC花費(fèi)的時(shí)間占到98%以上的話,JVM就會宣告投降了:java.lang.OutOfMemoryError: GC overhead limit exceeded

        無法為下一個(gè)操作分配足夠的內(nèi)存:如果無法滿足下一條指令所需要分配的內(nèi)存的話,你會收到一條”java.lang.OutOfMemoryError: Java heap space” 的錯誤信息。


        你可能也總結(jié)出來了,還有一種情況是你的內(nèi)存已經(jīng)緊張到連JVM創(chuàng)建一條OutOfMemoryError異常,填充堆棧信息,打印到屏幕上這點(diǎn)要求都滿足不了了。這種情況UncaughtExceptionHandler會捕獲到這個(gè)錯誤,而不再走通常的錯誤流程。這個(gè)處理器恰如其名,當(dāng)線程由于某個(gè)異??煲獟斓舻臅r(shí)候,它開始出來收場了。出現(xiàn)這種情況的話,JVM會找到線程對應(yīng)的 UncaughtExceptionHandler,然后調(diào)用它的uncaughtException方法。


         好了,Java程序在什么情形下會掛掉相信大家已經(jīng)有所了解了,想要了解Java方面更多信息的話可以登錄扣丁學(xué)堂官網(wǎng)了解,扣丁學(xué)堂不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的Java視頻教程供學(xué)員觀看學(xué)習(xí)哦,想要觀看Java視頻教程的小伙伴快快登錄扣丁學(xué)堂吧。Java技術(shù)交流群:670348138


關(guān)注微信公眾號獲取更多學(xué)習(xí)資料

關(guān)注微信公眾號獲取更多學(xué)習(xí)資料



查看更多關(guān)于“Java開發(fā)資訊的相關(guān)文章>>

標(biāo)簽: 扣丁學(xué)堂告訴你Java程序在什么情形下會掛掉 Java培訓(xùn) Java視頻教程 Java開發(fā)工程師

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部