亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

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

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
相關文章:
主站蜘蛛池模板: 亚洲一区日韩一区欧美一区a | 欧美一区二区三区视频在线观看 | 最新国产午夜精品视频不卡 | 一本伊大人香蕉高清在线观看 | 自拍偷自拍亚洲精品10p | 草久在线观看视频 | 久久福利资源网站免费看 | 亚洲日韩精品欧美一区二区一 | 久久国产精品-国产精品 | 欧美理论片在线观看一区二区 | 午夜美女久久久久爽久久 | 欧美成人免费全部观看天天性色 | 国产精品九九九久久九九 | 欧美成人香蕉网在线观看 | 可以免费观看欧美一级毛片 | 女人张开腿让男人捅爽 | 亚洲精品天堂在线观看 | 日韩美女网站在线看 | 97精品国产福利一区二区三区 | 美国大毛片 | 一级毛片aaa片免费观看 | 大香伊蕉国产短视频69 | 精品国产无限资源免费观看 | 精品国产综合成人亚洲区 | 亚洲欧美日产综合在线看 | 国产亚洲精彩视频 | 久视频免费精品6 | 中文字幕有码在线视频 | 亚洲性视频在线 | 久久精品中文字幕免费 | 草草影音 | 免费成年网| 在线视频欧美日韩 | 欧美日韩一区二区三区在线播放 | 国产一区二区三区在线观看视频 | 韩国美女高清爽快一级毛片 | 日韩欧美亚洲视频 | 欧美综合亚洲 | 久草新视频| 九九视频免费在线观看 | 国产成人精品曰本亚洲77美色 |