色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

Java full gc觸發情況實例解析

瀏覽:6日期:2022-09-02 17:13:01

前言

近期被問及這個問題,在此記錄整理一下。

System.gc()方法的調用

此方法的調用是建議JVM進行Full GC,雖然只是建議而非一定,但很多情況下它會觸發 Full GC,從而增加Full GC的頻率,也即增加了間歇性停頓的次數。強烈影響系建議能不使用此方法就別使用,讓虛擬機自己去管理它的內存,可通過通過-XX:+ DisableExplicitGC來禁止RMI調用System.gc。

老年代空間不足

老年代空間只有在新生代對象轉入及創建為大對象、大數組時才會出現不足的現象,當執行Full GC后空間仍然不足,則拋出如下錯誤:

java.lang.OutOfMemoryError: Java heap space

為避免以上兩種狀況引起的Full GC,調優時應盡量做到讓對象在Minor GC階段被回收、讓對象在新生代多存活一段時間及不要創建過大的對象及數組。

永生區空間不足

JVM規范中運行時數據區域中的方法區,在HotSpot虛擬機中又被習慣稱為永生代或者永生區,Permanet Generation中存放的為一些class的信息、常量、靜態變量等數據,當系統中要加載的類、反射的類和調用的方法較多時,Permanet Generation可能會被占滿,在未配置為采用CMS GC的情況下也會執行Full GC。如果經過Full GC仍然回收不了,那么JVM會拋出如下錯誤信息:java.lang.OutOfMemoryError: PermGen space為避免Perm Gen占滿造成Full GC現象,可采用的方法為增大Perm Gen空間或轉為使用CMS GC。

CMS GC時出現promotion failed和concurrent mode failure

對于采用CMS進行老年代GC的程序而言,尤其要注意GC日志中是否有promotion failed和concurrent mode failure兩種狀況,當這兩種狀況出現時可能會觸發Full GC。

promotion failed是在進行Minor GC時,survivor space放不下、對象只能放入老年代,而此時老年代也放不下造成的;concurrent mode failure是在

執行CMS GC的過程中同時有對象要放入老年代,而此時老年代空間不足造成的(有時候“空間不足”是CMS GC時當前的浮動垃圾過多導致暫時性的空間不足觸發Full GC)。

對措施為:增大survivor space、老年代空間或調低觸發并發GC的比率,但在JDK 5.0+、6.0+的版本中有可能會由于JDK的bug29導致CMS在remark完畢后很久才觸發sweeping動作。對于這種狀況,可通過設置-XX: CMSMaxAbortablePrecleanTime=5(單位為ms)來避免。

統計得到的Minor GC晉升到舊生代的平均大小大于老年代的剩余空間這是一個較為復雜的觸發情況,Hotspot為了避免由于新生代對象晉升到舊生代導致舊生代空間不足的現象,在進行Minor GC時,做了一個判斷,如果之前統計所得到的Minor GC晉升到舊生代的平均大小大于舊生代的剩余空間,那么就直接觸發Full GC。

例如程序第一次觸發Minor GC后,有6MB的對象晉升到舊生代,那么當下一次Minor GC發生時,首先檢查舊生代的剩余空間是否大于6MB,如果小于6MB,則執行Full GC。

當新生代采用PS GC時,方式稍有不同,PS GC是在Minor GC后也會檢查,例如上面的例子中第一次Minor GC后,PS GC會檢查此時舊生代的剩余空間是否大于6MB,如小于,則觸發對舊生代的回收。

除了以上4種狀況外,對于使用RMI來進行RPC或管理的Sun JDK應用而言,默認情況下會一小時執行一次Full GC。可通過在啟動時通過- java -

Dsun.rmi.dgc.client.gcInterval=3600000來設置Full GC執行的間隔時間或通過-XX:+ DisableExplicitGC來禁止RMI調用System.gc。

堆中分配很大的對象

所謂大對象,是指需要大量連續內存空間的java對象,例如很長的數組,此種對象會直接進入老年代,而老年代雖然有很大的剩余空間,但是無法找到足夠大的連續空間來分配給當前對象,此種情況就會觸發JVM進行Full GC。

為了解決這個問題,CMS垃圾收集器提供了一個可配置的參數,即-XX:+UseCMSCompactAtFullCollection開關參數,用于在“享受”完Full GC服務之后額外免費贈送一個碎片整理的過程,內存整理的過程無法并發的,空間碎片問題沒有了,但提頓時間不得不變長了,JVM設計者們還提供了另外一個參數 -XX:CMSFullGCsBeforeCompaction,這個參數用于設置在執行多少次不壓縮的Full GC后,跟著來一次帶壓縮的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 欧美精品久久久久久久影视 | 日韩一级在线视频 | 九热视频在线观看 | 日韩在线视频不卡一区二区三区 | 欧美一级毛片欧美大尺度一级毛片 | 视频在线一区二区 | 俄罗斯美女在线观看一区 | 国产精品短视频免费观看 | 日本人成18在线播放 | 日本一级全黄大片 | 欧美成人免费观看的 | 性色a | 在线免费一区 | 久久99精品久久久久久秒播放器 | 在线欧洲成人免费视频 | 看片亚洲 | 波多野结衣一区在线 | 国产毛片一区 | 久热国产视频 | 亚洲国产一区二区三区综合片 | 国产精品不卡在线 | 欧美亚洲中日韩中文字幕在线 | 国产麻豆福利a v在线播放 | 日韩精品一区二区在线观看 | 男女朋友做爽爽爽免费视频网 | a级男女性高爱潮高清试 | 欧美在线a | 亚洲夜夜爽| 色偷偷88欧美精品久久久 | 99久久国产综合精品五月天 | 精品韩国主播福利视频在线观看一 | 亚洲系列国产系列 | 成人三级做爰在线观看男女 | 99久久精品男女性高爱 | 精品久久久久久久久久香蕉 | 久久久久久一品道精品免费看 | 日本欧美久久久久免费播放网 | 超清波多野结衣精品一区 | 国产精品视频永久免费播放 | 亚洲成人免费视频 | 欧美一级毛片日韩一级 |