亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java full gc觸發(fā)情況實例解析

 更新時間:2020年04月16日 10:37:03   作者:經(jīng)典雞翅  
這篇文章主要介紹了Java full gc觸發(fā)情況實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

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

System.gc()方法的調(diào)用

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

老年代空間不足

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

java.lang.OutOfMemoryError: Java heap space

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

永生區(qū)空間不足

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

CMS GC時出現(xiàn)promotion failed和concurrent mode failure

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

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

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

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

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

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

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

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

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

堆中分配很大的對象

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java異常類型及處理詳情

    Java異常類型及處理詳情

    這篇文章主要介紹了Java異常類型及處理, 異常指的是程序在執(zhí)行過程中,出現(xiàn)了非正常情況,導致了java的jvm停止。感興趣的小伙伴就和小編一起來學習下面文章的具體內(nèi)容吧
    2021-09-09
  • 用命令行編譯java并生成可執(zhí)行的jar包方法

    用命令行編譯java并生成可執(zhí)行的jar包方法

    下面小編就為大家分享一篇用命令行編譯java并生成可執(zhí)行的jar包方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java中綴表達式轉后綴表達式實現(xiàn)方法詳解

    Java中綴表達式轉后綴表達式實現(xiàn)方法詳解

    這篇文章主要介紹了Java中綴表達式轉后綴表達式實現(xiàn)方法,結合實例形式分析了Java中綴表達式轉換成后綴表達式的相關算法原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • java學習DongTai被動型IAST工具部署過程

    java學習DongTai被動型IAST工具部署過程

    被動型IAST被認為是DevSecOps測試階段實現(xiàn)自動化安全測試的最佳工具,而就在前幾天,洞態(tài)IAST正式開源了,這對于甲方構建安全工具鏈來說,絕對是一個大利好
    2021-10-10
  • Java中獲取List中最后一個元素的三種方法

    Java中獲取List中最后一個元素的三種方法

    在Java編程中我們經(jīng)常需要獲取一個List集合中的最后一個元素,這篇文章主要給大家介紹了關于Java中獲取List中最后一個元素的三種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Java遞歸求和1+2+3+...+n實例詳解

    Java遞歸求和1+2+3+...+n實例詳解

    在本篇文章里小編給大家?guī)砹岁P于Java遞歸求和1+2+3+...+n實例內(nèi)容,需要的朋友們可以學習參考下。
    2020-01-01
  • 聊一聊Java反射

    聊一聊Java反射

    工作中哪些地方比較容易用到反射,這篇文章就為大家介紹了工作中常用到的Java反射,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java中正則表達式的使用和詳解(上)

    Java中正則表達式的使用和詳解(上)

    這篇文章主要介紹了Java中正則表達式的使用和詳解,包括匹配驗證驗證email是否正確,在字符串中查詢字符或者字符串的代碼實例,需要的朋友可以參考下
    2017-04-04
  • Java歸并排序算法代碼實現(xiàn)

    Java歸并排序算法代碼實現(xiàn)

    歸并(Merge)排序法是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的,下面這篇文章主要給大家介紹了關于Java歸并排序算法的相關資料,需要的朋友可以參考下
    2024-03-03
  • SpringBoot整合SQLite數(shù)據(jù)庫全過程

    SpringBoot整合SQLite數(shù)據(jù)庫全過程

    sqlite是一個很輕量級的數(shù)據(jù)庫,可以滿足日常sql的需求,下面這篇文章主要給大家介紹了關于SpringBoot整合SQLite數(shù)據(jù)庫的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03

最新評論