collector種類

成都創新互聯公司2013年開創至今,先為商州等服務建站,商州等地企業,進行企業商務咨詢服務。為商州企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
GC在HotSpotVM5.0里有四種:
incremental(sometimescalledtrain)lowpausecollector已被廢棄,不在介紹.
| 類別 | serialcollector(串行) | parallelcollector(并行) (throughputcollector)---(關注吞吐量) | concurrentcollector(并發) (concurrentlowpausecollector)----(關注響應時間) |
| 介紹 | 單線程收集器 | 并行收集器 | 并發收集器 |
| 試用場景 | 單處理器機器且沒有pausetime的要求 | 適用于科學技術和后臺處理 | 適合中規模/大規模數據集大小的應用,應用服務器,電信領域 |
| 使用 | Client模式下默認 可使用 可用-XX:+UseSerialGC強制使用 優點:對server應用沒什么優點 缺點:慢,不能充分發揮硬件資源 | Server模式下默認 --YGC:PSFGC:ParallelMSC 可用-XX:+UseParallelGC或-XX:+UseParallelOldGC強制指定 --ParallelGC代表FGC為ParallelMSC --ParallelOldGC代表FGC為ParallelCompacting 優點:高效 缺點:當heap變大后,造成的暫停時間會變得比較長 | 可用-XX:+UseConcMarkSweepGC強制指定 |
| 內存回收觸發 | YGC eden空間不足 FGC old空間不足 perm空間不足 顯示調用System.gc(),包括RMI等的定時觸發 YGC時的悲觀策略 dumplive的內存信息時(jmap–dump:live) | YGC eden空間不足 FGC old空間不足 perm空間不足 顯示調用System.gc(),包括RMI等的定時觸發 YGC時的悲觀策略--YGC前&YGC后 dumplive的內存信息時(jmap–dump:live) | YGC eden空間不足 CMSGC 1.oldGen的使用率達到一定的比率默認為92% 2.配置了CMSClassUnloadingEnabled,且PermGen的使用達到一定的比率默認為92% 3.Hotspot自己根據估計決定是否要觸法 4.在配置了ExplictGCInvokesConcurrent的情況下顯示調用了System.gc. FullGC(SerialMSC) promotionfailed或concurrentModeFailure時; |
| 內存回收觸發時發生了什么 | YGC 清空eden+from中所有noref的對象占用的內存 將eden+from中的所有存活的對象copy到to中 在這個過程中一些對象將晉升到old中: --to放不下的 --存活次數超過tenuringthreshold的 重新計算TenuringThreshold; 單線程做以上動作 全程暫停應用 FGC 如果配置了CollectGen0First,則先觸發YGC 清空heap中noref的對象,permgen中已經被卸載的classloader中加載的class的信息 單線程做以上動作 全程暫停應用 | YGC 同serial動作基本相同,不同點: 1.多線程處理 2.YGC的最后不僅重新計算TenuringThreshold,還會重新調整Eden和From的大小 FGC 1.如配置了ScavengeBeforeFullGC(默認),則先觸發YGC(??) 2.MSC:清空heap中的noref對象,permgen中已經被卸載的classloader中加載的class信息,并進行壓縮 3.Compacting:清空heap中部分noref的對象,permgen中已經被卸載的classloader中加載的class信息,并進行部分壓縮 多線程做以上動作. | YGC 同serial動作基本相同,不同點: 1.多線程處理 CMSGC: 1.oldgen到達比率時只清除oldgen中noref的對象所占用的空間 2.permgen到達比率時只清除已被清除的classloader加載的class信息 FGC 同serial |
| 細節參數 | 可用-XX:+UseSerialGC強制使用 -XX:SurvivorRatio=x,控制eden/s0/s1的大小 -XX:MaxTenuringThreshold,用于控制對象在新生代存活的最大次數 -XX:PretenureSizeThreshold=x,控制超過多大的字節的對象就在old分配. | -XX:SurvivorRatio=x,控制eden/s0/s1的大小 -XX:MaxTenuringThreshold,用于控制對象在新生代存活的最大次數 -XX:UseAdaptiveSizePolicy去掉YGC后動態調整edenfrom已經tenuringthreshold的動作 -XX:ParallelGCThreads設置并行的線程數 | -XX:CMSInitiatingOccupancyFraction設置oldgen使用到達多少比率時觸發 -XX:CMSInitiatingPermOccupancyFraction,設置PermGen使用到達多少比率時觸發 -XX:+UseCMSInitiatingOccupancyOnly禁止hostspot自行觸發CMSGC |
注:
throughputcollector與concurrentlowpausecollector的區別是throughputcollector只在youngarea使用使用多線程,而concurrentlowpausecollector則在tenuredgeneration也使用多線程。
根據官方文檔,他們倆個需要在多CPU的情況下,才能發揮作用。在一個CPU的情況下,還不如默認的serialcollector,因為線程管理需要耗費CPU資源。而在兩個CPU的情況下,也提高不大。只是在更多CPU的情況下,才會有所提高。當然concurrentlowpausecollector有一種模式可以在CPU較少的機器上,提供盡可能少的停頓的模式,見CMSGCIncrementalmode。
當要使用throughputcollector時,在javaopt里加上-XX:+UseParallelGC,啟動throughputcollector收集。也可加上-XX:ParallelGCThreads=<desirednumber>來改變線程數。還有兩個參數-XX:MaxGCPauseMillis=<nnn>和-XX:GCTimeRatio=<nnn>,MaxGCPauseMillis=<nnn>用來控制最大暫停時間,而-XX:GCTimeRatio可以提高GC說占CPU的比,以最大話的減小heap。
新聞名稱:JVM系列四:HotSpotVMGC的種類
地址分享:http://www.yijiale78.com/article28/pcsscp.html
成都網站建設公司_創新互聯,為您提供域名注冊、網站導航、自適應網站、用戶體驗、網站改版、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯