国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java 常見的幾種內存溢出異常的原因及解決

瀏覽:98日期:2022-08-13 16:04:16

內存溢出的異常有很多,并且每種內存溢出都會有不同的異常信息和解決方式,下面會列出常見的幾種內存溢出異常

堆內存溢出

java.lang.OutOfMemoryError: Java heap space

原因: 當堆內存不足,并且已經達到JVM設置的最大值,無法繼續申請新的內存,存活的對象在堆內存中無法被回收,那么就會拋出該異常,表示堆內存溢出。 當一次從數據庫查詢大量數據,堆內存沒有足夠的內存可以存放大量的數據 大量的強引用對象在堆內存中存活,GC無法回收這些對象,新創建的對象在新生代無法進行分配,Full GC仍然無法進行回收解決方案: 查看當前JVM的堆內存配置是否太小,可以考慮增加堆內存大小

JAVA_OPTS='-server -Xms1024m -Xmx1024m'

表示將堆內存的初始值和最大值都設置為1024m

-Xms設置堆內存的初始值

-Xmx設置堆內存的最大值

-Xms和-Xmx最好設置相同的內存大小,可以防止因為JVM頻繁進行內存的調整影響穩定性和使用

查看代碼中是否有從數據庫中一次加載大量數據的情況,或者代碼中有大量強引用無法進行回收

通過JVM參數:-XX:+HeapDumpOnOutOfMemoryError可以讓虛擬機在出現內存溢出的時候Dump出當前的堆內存快照,便于保留快照分析

棧內存溢出

java.lang.outOfMemoryError:StackOverFlow Error

原因: 線程請求的棧深度大于虛擬機允許的最大深度,拋出StackOverflowError 虛擬機在擴展棧時無法申請到足夠的內存空間,拋出OutOfMemoryError 解決方案: 檢查代碼是否出現深度遞歸的情況,或者遞歸的終止條件沒有設置 如果是線程的棧內存空間過小,則通過-Xss設置每個線程的棧內存空間

默認的-Xss參數的大小應該是1M

棧內存是線程私有的,如果需要創建更多的線程,那么就需要將每個線程的棧內存空間減小,通過-Xss參數設置每個線程的棧內存空間

配置參數: JAVA_OPTS='-server -Xms1024m -Xmx1024m -Xss128k'

jdk8如果沒有配置-Xss默認大小為512k

-Xss 設置每個線程的堆棧大小,一般默認512~1024kb,和jdk版本有關

方法區和運行時常量池內存溢出

java.lang.outOfMemoryError: PermGen space

原因: 方法區存放的是Class的相關信息,如類名、訪問修飾符、常量池、字段描述、方法描述等,內存溢出的原因可能是加載的類過多導致方法區沒有足夠的內存 如果程序中大量使用cglib或者動態代理等對目標類進行代理,那么在運行時會生成大量的代理類,如Spring、Hibernate等框架。所以生成的代理類過多導致方法區沒有足夠的內存

解決方案:

減少沒有必要的Class加載,防止方法區內存溢出并且減少程序的編譯時間 通過JVM參數設置方法區的大小,-XX:PermSize和-XX:MaxPermSize設置方法區的大小

運行時常量池是方法區的一部分,所以增加方法區的內存大小,相當于間接的增加了運行時常量池的內存大小

本機直接內存溢出

Direct buffer memory

Java 允許應用程序通過 DirectByteBuffer 直接訪問堆外內存,許多高性能程序通過 DirectByteBuffer 結合內存映射文件(Memory Mapped File)實現高速 IO

原因:

DirectByteBuffer 的默認大小為 64 MB,一旦使用超出限制,就會拋出 Direct buffer memory 錯誤。使用NIO則可能會出現該異常

解決方案:

DirectMemory的內存大小可以通過-XX:MaxDirectMemorySize指定,如果沒有設置,則默認和Java堆最大值(-Xmx)一樣

元空間內存溢出

Metaspace

Jdk8 之后使用元空間(metaspace)代替永久代,元空間和永久代最大的區別是元空間的內存使用的是本地內存,而永久代使用的是JVM的內存

永久代、元空間都是方法區的實現,方法區是規范

原因:

元空間中存儲的是類信息、常量池、方法描述等信息,直接使用本地內存,當本地內存不足的時候,會拋出OutOfMemoryError:Metaspace異常

解決方案:

雖然元空間的內存不是由JVM控制,不過可以通過JVM參數來設置分配的內存空間的大小-XX:MaxMetaspaceSize配置參數

以上就是Java 常見的幾種內存溢出異常及解決的詳細內容,更多關于Java 內存溢出的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: wwwxxx欧美| 草草影院欧美三级日本 | 日本a级精品一区二区三区 日本a级毛片免费视频播放 | 国产成人精品久久综合 | 手机在线黄色 | 美女一级ba大片免色野外 | 一区二区三区国产美女在线播放 | 免费一级毛片在播放视频 | 视频偷拍一级视频在线观看 | 国产精品久久久久久久久免费观看 | 最新怡红院全部视频在线 | 欧美激情亚洲一区中文字幕 | 日本乱人伦片中文字幕三区 | 一区二区三区欧美 | 美女扒开双腿让男人爽透视频 | 亚洲精品第一国产综合野 | 久久五月女厕所一区二区 | 亚洲精品中文字幕一区 | 天天舔夜夜操 | 精品国产乱码久久久久久一区二区 | 国产一区二区精品久 | 2019国产精品| 日韩一区二区三区视频在线观看 | 可以免费看黄的网站 | 国产成人免费观看在线视频 | 国产成人a在一区线观看高清 | 看全色黄大色黄大片女图片 | 亚州人成网在线播放 | 国产精品资源在线 | 日本欧美久久久久免费播放网 | 欧美全免费aaaaaa特黄在线 | 在线观看一级 | 91久久精一区二区三区大全 | 日本免费在线一区 | 三级国产精品一区二区 | 寡妇野外啪啪一区二区 | 精品午夜寂寞影院在线观看 | 国产精品aⅴ | 国产精品爽爽va在线观看无码 | 国产午夜视频 | 国产精品成人一区二区三区 |