日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jvm中有哪些内存区域会发生内存溢出

發(fā)布時(shí)間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jvm中有哪些内存区域会发生内存溢出 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、方法區(qū)溢出

第一種原因:上線的時(shí)候MetaSpace區(qū)域直接用默認(rèn)的參數(shù),即根本不設(shè)置其大小,這會(huì)導(dǎo)Meta

Space區(qū)域可能才幾十M而已或者設(shè)置的比較小,此時(shí)對(duì)于一個(gè)稍微大型系統(tǒng),因?yàn)樗泻芏嘧约旱念?#xff0c;還依賴了很多外部jar包的類,MetaSpace空間很容易不夠的。

第二種原因:就是很多人開發(fā)系統(tǒng)代碼都會(huì)用一些cglib之類的技術(shù)動(dòng)態(tài)生成一些類,一旦代碼沒有控制好,導(dǎo)致生成的類過多的時(shí)候,就很容易MetaSpace給塞滿,進(jìn)而引起內(nèi)存溢出。

2、虛擬機(jī)棧/本地方法棧溢出
(1)StackOverflowError:當(dāng)線程請(qǐng)求的棧的深度大于虛擬機(jī)所允許的最大深度,則拋出StackOverflowError,簡單理解就是虛擬機(jī)棧中的棧幀數(shù)量過多(一個(gè)線程嵌套調(diào)用的方法數(shù)量過多)時(shí),就會(huì)拋出StackOverflowError異常。最常見的場(chǎng)景就是方法無限遞歸調(diào)用。
(2)OutOfMemoryError:如果虛擬機(jī)在擴(kuò)展棧時(shí)無法申請(qǐng)到足夠的內(nèi)存空間,則拋出 OutOfMemoryError。
虛擬機(jī)中可以供棧占用的空間≈可用物理內(nèi)存 - 最大堆內(nèi)存 - 最大方法區(qū)內(nèi)存,比如一臺(tái)機(jī)器內(nèi)存為 4G,系統(tǒng)和其他應(yīng)用占用 2G,虛擬機(jī)可用的物理內(nèi)存為 2G,最大堆內(nèi)存為 1G,最大方法區(qū)內(nèi)存為 512M,那可供棧占有的內(nèi)存大約就是 512M,假如我們?cè)O(shè)置每個(gè)線程棧的大小為 1M,那虛擬機(jī)中最多可以創(chuàng)建 512個(gè)線程,超過 512個(gè)線程再創(chuàng)建就沒有空間可以給棧了,就報(bào) OutOfMemoryError 異常了。

3、堆內(nèi)存溢出
(1)內(nèi)存中加載的數(shù)據(jù)過多如一次從數(shù)據(jù)庫中取出過多數(shù)據(jù);集合對(duì)對(duì)象引用過多且使用完后沒有清空;代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復(fù)對(duì)象;堆內(nèi)存分配不合理;網(wǎng)絡(luò)連接問題、數(shù)據(jù)庫問題等。
(2)系統(tǒng)承載高并發(fā)請(qǐng)求,因?yàn)檎?qǐng)求量過大,導(dǎo)致大量的對(duì)象都是存活的,所以要放入新的對(duì)象放不下了,此時(shí)就會(huì)引起內(nèi)存溢出系統(tǒng)崩潰;
(3)系統(tǒng)有泄漏的問題,就是莫名其妙產(chǎn)生了很多對(duì)象,結(jié)果對(duì)象都是存活的,沒有及時(shí)取消他們的引用,導(dǎo)致觸發(fā)GC還是無法回收,此時(shí)只能引發(fā)內(nèi)存溢出,因?yàn)閷?shí)在是放不下更多的對(duì)象了。

4、本機(jī)直接內(nèi)存溢出
本機(jī)直接內(nèi)存(DirectMemory)并不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,也不是 Java 虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域,但 Java 中用到 NIO 相關(guān)操作時(shí)(比如 ByteBuffer 的 allocteDirect 方法申請(qǐng)的是本機(jī)直接內(nèi)存),也可能會(huì)出現(xiàn)內(nèi)存溢出的異常

總結(jié)

以上是生活随笔為你收集整理的jvm中有哪些内存区域会发生内存溢出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。