java發(fā)生oom時(shí)候進(jìn)程是否掛掉?
運(yùn)行參數(shù):-Xms10m -Xmx10m
1 主線程main發(fā)生oom爽柒,進(jìn)程掛掉
主線程oom
2 其他線程發(fā)生oom厅克,發(fā)生oom的線程會掛掉释液。main線程繼續(xù)涣雕。
發(fā)生oom的線程掛掉
thread發(fā)生了oom艰亮,但是主線程還在繼續(xù)打印thread的狀態(tài)。
3 發(fā)生oom的線程會死亡挣郭,其他線程繼續(xù)迄埃。
thread發(fā)生oom,thread1 和main線程還在繼續(xù)兑障。
總結(jié):java中發(fā)生oom時(shí)侄非,發(fā)生oom的線程會死亡,其他線程會繼續(xù)執(zhí)行流译。如果主線程發(fā)生oom逞怨,進(jìn)程掛掉
但是其他線程還是會受到影響,比如發(fā)生oom的線程占用了很多內(nèi)存福澡,導(dǎo)致內(nèi)存不足叠赦,這樣其他線程創(chuàng)建大的內(nèi)存的時(shí)候也會發(fā)生oom。(這里并不是一定會發(fā)生革砸,比如線程1發(fā)生oom死亡除秀,線程2再去創(chuàng)建的時(shí)候,線程1的空間被回收算利,這樣線程2就有空間創(chuàng)建對象册踩,繼續(xù)操作)
兩個(gè)線程都死亡的情況:
2個(gè)線程都死亡
這里thread和thread1都死亡。
thread進(jìn)行9次循環(huán)效拭,占用內(nèi)存9m暂吉。這個(gè)時(shí)候thread1去創(chuàng)建一個(gè)2m的數(shù)值,內(nèi)存不夠缎患,發(fā)生gc慕的。這個(gè)時(shí)候thread占用的空間回收不掉(被list引用)。那么thread1就發(fā)生oom異常挤渔。如果thread先發(fā)生oom異常业稼,這個(gè)時(shí)候thread1再去創(chuàng)建對象,內(nèi)存不夠蚂蕴,發(fā)生gc,這個(gè)時(shí)候thread中l(wèi)ist引用的對象被回收俯邓,thread1再去創(chuàng)建對象骡楼,可以創(chuàng)建成功,不會發(fā)生oom稽鞭。那么thread1就不會死亡鸟整。