中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM系列四:HotSpot VM GC 的種類

發布時間:2020-08-15 09:50:30 來源:網絡 閱讀:803 作者:wxl604746107 欄目:軟件技術

HotSpotVMGC的種類

collector種類

GC在HotSpotVM5.0里有四種:

incremental(sometimescalledtrain)lowpausecollector已被廢棄,不在介紹.

類別serialcollector(串行)parallelcollector(并行)
(throughputcollector)---(關注吞吐量)
concurrentcollector(并發)
(concurrentlowpausecollector)----(關注響應時間)
介紹

單線程收集器
使用單線程去完成所有的gc工作,沒有線程間的通信,這種方式會相對高效

并行收集器
使用多線程的方式,利用多CUP來提高GC的效率
主要以到達一定的吞吐量為目標

并發收集器
使用多線程的方式,利用多CUP來提高GC的效率
并發完成大部分工作,使得gcpause短

試用場景單處理器機器且沒有pausetime的要求

適用于科學技術和后臺處理
有中規模/大規模數據集大小的應用且運行在多處理器上,關注吞吐量(throughput)

適合中規模/大規模數據集大小的應用,應用服務器,電信領域
關注responsetime,而不是throughput

使用Client模式下默認
可使用
可用-XX:+UseSerialGC強制使用
優點:對server應用沒什么優點
缺點:慢,不能充分發揮硬件資源

Server模式下默認

--YGC:PSFGC:ParallelMSC

可用-XX:+UseParallelGC或-XX:+UseParallelOldGC強制指定

--ParallelGC代表FGC為ParallelMSC

--ParallelOldGC代表FGC為ParallelCompacting

優點:高效

缺點:當heap變大后,造成的暫停時間會變得比較長

可用-XX:+UseConcMarkSweepGC強制指定
優點:
對old進行回收時,對應用造成的暫停時間非常短,適合對響應時間要求比較高的應用
缺點:
1.內存碎片和浮動垃圾
2.old去的內存分配效率低
3.回收的整個耗時比較長
4.和應用爭搶CPU
內存回收觸發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。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌平区| 许昌县| 曲松县| 乌审旗| 镇远县| 南昌市| 漯河市| 涟源市| 丰顺县| 丹阳市| 仪征市| 安塞县| 仁化县| 佳木斯市| 韩城市| 金沙县| 黑龙江省| 武威市| 连江县| 敦煌市| 稻城县| 宜春市| 息烽县| 台湾省| 海城市| 灵川县| 西充县| 紫阳县| 瑞丽市| 普格县| 绵竹市| 弥勒县| 文昌市| 耒阳市| 托里县| 峨边| 彭州市| 扎赉特旗| 潞城市| 宁陕县| 宿迁市|