久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > Java視頻教程之Java程序在什么情形下會(huì)掛掉

Java視頻教程之Java程序在什么情形下會(huì)掛掉

發(fā)布人:扣丁學(xué)習(xí) 時(shí)間:2020-11-27 來(lái)源:工程師 發(fā)布文章

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

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


  classWrapper{


  publicstaticvoidmain(Stringargs[])throwsException{


  Mapmap=System.getProperties();


  Randomr=newRandom();


  while(true){


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


  }


  }


  }


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


  java-Xmx100m-XX:+UseParallelGCWrapper


  我會(huì)在終端中看到j(luò)ava.lang.OutOfMemoryError:GCoverheadlimitexceeded的異常信息。不過(guò)如果我調(diào)整一下堆大小或者是GC的類(lèi)型的話(huà),在我的MacOSX10.9.2系統(tǒng)上用OracleHotspotJDK1.7.0_45來(lái)運(yùn)行,就會(huì)出現(xiàn)不同的情況。


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


  java-Xmx10m-XX:+UseParallelGCWrapper


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


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


  MyPrecious:examplesvladimir$java-Xmx100m-XX:+UseConcMarkSweepGCWrapper


  Exception:java.lang.OutOfMemoryErrorthrownfromtheUncaughtExceptionHandlerinthread"main"


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


  GC的安全性檢查失敗:一旦GC花費(fèi)的時(shí)間占到98%以上的話(huà),JVM就會(huì)宣告投降了:java.lang.OutOfMemoryError:GCoverheadlimitexceeded。


  無(wú)法為下一個(gè)操作分配足夠的內(nèi)存:如果無(wú)法滿(mǎn)足下一條指令所需要分配的內(nèi)存的話(huà),你會(huì)收到一條”java.lang.OutOfMemoryError:Javaheapspace”的錯(cuò)誤信息。


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


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

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

紅外熱像儀相關(guān)文章:紅外熱像儀原理


關(guān)鍵詞:

相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉