??è?‘??¨??′???JVM????…3???PPT??????CMS??—?3????è???o???é??????ˉ????é?…èˉ??o????é??è???¤??o?解????1?????§??-????????
???1???ˉCMS
CMS?…¨?§° Concurrent Mark Sweep?????ˉ??????1???‘?????????”¨???è?°-??…é?¤??—?3??????????????”???¨???
?|????è??1′??£????”¨CMS??????????”???¨???é?è|??·????è???????o?????°-“XX:+UseConcMarkSweepGC”??
????”¨??o??ˉ???
GCè???¨???-?????????é?????ˉ1?—????è|??±?è??é???????????????”¨??·?o??¨?????…?è??é???—?é—′??????é????
??o??1???
??????é???—?é—′è??è?????é??????¥é???????…?-??¢??‰???–??
??|?¤–?????—?3??????°?ˉ”è???¤????????|?????1???—??o??1???èˉ???‰
?????°??o???
??1???GC???è§|??‘??o????????o????‘¨????§Old GC???è¢???¨??‰?’??????¨Old GC
??a?oo???解????????¨?????¥é?“???1?????‰??¥???
?‘¨????§Old GC
?‘¨????§Old GC????‰§è?????é?è?‘?1????Background Collect????ˉ1è??1′??£è??è??????”??????¨GC?—¥??—??-?ˉ”è?????è§?????”±?????°?o??¨?ConcurrentMarkSweepThread??a??ˉ??¤?–-???é??è?¤2s??‰??ˉ??|é?è|?è§|??‘??
è§|??‘??????
1???|?????2???‰è?????-XX:+UseCMSInitiatingOccupancyOnly???è???????o?????1????”?é???????°?????3?????ˉ??|è§|??‘?????oè???o??????ˉ?¢???|???è????a?????°????????????????¤§é—?é¢???’??¥???é???o|??‰??
2??è??1′??£????”¨???è????°é???? CMSInitiatingOccupancyFraction???é??è?¤92%??
3???°??1…??£???????”¨???è????°é???? CMSInitiatingPermOccupancyFraction???é??è?¤92%????‰??????ˉ????ˉ CMSClassUnloadingEnabled??
4???–°?”???£???????????…????¤±è′¥??
????????…????¤±è′¥
è??1′??£??ˉ??|??‰è?3?¤??????oé—′??¥??1?o3?…¨é?¨????–°?”???£?ˉ1è±???–?????2?13???????????°è??1′??£????ˉ1è±?????|????????¤????èˉ?????°±????—?è??è???????è??1′??£???????”????é?2?-¢??????è??è??YGC????—?????‘?”????????¤±è′¥??
?‘¨????§Old GCè???¨?
??“?????????è?3?—????é???”¨a????è?°-??…???a???—?3??ˉ1è??1′??£è??è??????”????è???¨???ˉ??¥èˉ′??????????????è?°??o?-??′??ˉ1è±??????…?????‰???????ˉ1è±?????????ˉ??o?o??????°??′??aè???¨??????????è????????é?…??—?3?è??è???2?è???1???????????′??aè???¨??????o?|?????????aé?¨??????
?ˉ1è±???¨???è?°è???¨???-?????1??????è?°??…??μ???????????‰?±????
- ???è‰2?ˉ1è±????è?¨?¤oè?aèo???aè¢????è?°???
- ??°è‰2?ˉ1è±????è?¨?¤oè?aèo?è¢????è?°????????…é?¨????”¨??aè¢??¤???????
- é?‘è‰2?ˉ1è±????è?¨?¤oè?aèo?è¢????è?°?????…é?¨????”¨é??è¢??¤???????
???è????‘?”?Background Collect?—????Java???????ˉ1è±????????|???????
1??InitialMarking???????§???–???è?°?????′??aè???¨?STW??‰
èˉ¥é????μ????o??¨??‰§è????????è|?????????o??¤?-¥???
- ???è?°GC Roots??ˉè?????è??1′??£?ˉ1è±????
- é??????–°?”???£?ˉ1è±???????è?°??ˉè?????è??1′??£?ˉ1è±????
èˉ¥è???¨???“??????????ˉ1è±????????|???????
2??Marking????1???‘???è?°??‰
èˉ¥é????μGC?o??¨??’??o”?”¨?o??¨??1???‘?‰§è?????é?????InitialMarkingé????μ???è?°??o??¥????-??′??ˉ1è±????????????§??-é’??’???è?°è???o??ˉ1è±???ˉè??????ˉ1è±???
?????oèˉ¥é????μ?1???‘?‰§è??????????¨è??è?????é—′??ˉè????‘?”??–°?”???£????ˉ1è±?????????°è??1′??£????–è…??ˉ??′??¥??¨è??1′??£???é…??ˉ1è±?????–è…??′?–°è??1′??£?ˉ1è±????????”¨?…3?3??-‰?-‰????ˉ1?o?è???o??ˉ1è±????é????ˉé?è|?è??è??é???–°???è?°????????|?????‰?o??ˉ1è±??°±???è¢?é?—????????‘?”????????????…??μ??
??o?o????é??é???–°???è?°????????????èˉ¥é????μ?????????è?°?ˉ1è±??‰??¨???Card???èˉ???oDirty????????-??aé??‰????è???o?Dirty Card????ˉ1è±????é???…??‰??????′??aè??1′??£??
3??Precleaning???é¢???…?????‰
é?è???????°CMSPrecleaningEnabledé‰????…3é—-èˉ¥é????μ???é??è?¤??ˉ?”¨??????è|??????¤????o???…???
- ?¤?????–°?”???£?·2?????‘??°???????”¨????ˉ”?|???¨?1???‘é????μ?????¨Eden??o??-???é…??o?????aA?ˉ1è±????A?ˉ1è±?????”¨?o?????aè??1′??£?ˉ1è±?B???è????aB?1??‰??2???‰è¢????è?°??‰?????¨è????aé????μ?°±??????è?°?ˉ1è±?B??o?′?è·??ˉ1è±???
- ??¨?1???‘???è?°é????μ????|????è??1′??£??-??‰?ˉ1è±???…é?¨????”¨??‘?”??????–??????????‰??¨???Card???è?°??oDirty????…????è??é???1?é??????”¨CardTable???è???ˉ????a?±?????????°?????“?????????ModUnionTalble??‰???é?è???‰????è???o?Table???é???–°???è?°é?£?o???¨?1???‘???è?°é????μ????”¨è¢???′?–°????ˉ1è±????????????°è??1′??£????ˉ1è±??????????°±??¨è??1′??£????ˉ1è±???‰
4??AbortablePreclean?????ˉ??-?–-???é¢???…?????‰
èˉ¥é????μ??‘?”?????‰??????ˉ????–°?”???£Eden??o?????…?-?????”¨é???¤§?o??????°CMSScheduleRemarkEdenSizeThreshold é??è?¤??ˉ2M????|?????–°?”???£????ˉ1è±??¤a?°‘????°±?2???‰??…è|??‰§è??èˉ¥é????μ?????′??¥?‰§è??é???–°???è?°é????μ??
??o???1?é?è|?è????aé????μ????-???¨?????·????ˉ???1????
?????oCMS GC?????????????????ˉé???????????????”??—???????????—?é—′????‰??¥??¨èˉ¥é????μè|??°????¤§?????a???????¤????é?£?o???¨?1???‘é????μè¢??o”?”¨?o??¨???′?–°???è??1′??£?ˉ1è±????è????·??¨?????????é???–°???è?°é????μ?°±??ˉ??¥?°‘?¤???????o???????????—?é—′?1????????o”???é???????
??¨èˉ¥é????μ??????è|???a??ˉ????????¤????o????
- ?¤???? From ?’? To ??o????ˉ1è±???????è?°??ˉè?????è??1′??£?ˉ1è±?
- ?’????????aé????μ????·????‰?????¤????Dirty Card??-????ˉ1è±?
??“????o????è????aé?è?‘??????????′??a??ˉ??????????‰“?–-è????a??a??ˉ???????????‰??‰??a???
- ??ˉ??¥è????????¤???a??ˉ????????° CMSMaxAbortablePrecleanLoops???é??è?¤??ˉ0?????????2???‰??a??ˉ?????°???é???????
- ?|?????‰§è??è????aé?è?‘????—?é—′è????°?o?é????CMSMaxAbortablePrecleanTime???é??è?¤??ˉ5s??????é??o??a??ˉ??
- ?|?????–°?”???£Eden??o?????…?-?????”¨???è????°?o?é????CMSScheduleRemarkEdenPenetration???é??è?¤50%??????é??o??a??ˉ?????è????a??????è???¤???????????‰??????ˉ?????¨è??è??Precleaning?—????Eden??o???????”¨????°??o????????1?????‰
?|??????¨??a??ˉé??o?1??‰??????‘?”??o??????YGC????ˉ1?o????é?¢???Remarké????μ??¥èˉ′????¤§?¤§???è???o??‰?????1′è????£???è′???…????????ˉ??‘?”?YGC?1?é???oo??o??§???????‰??¥??aè???¥??¥·è??5s??…??ˉ??¥??¥?????YGC??
... 1678.150: [CMS-concurrent-preclean-start] 1678.186: [CMS-concurrent-preclean: 0.044/0.055 secs] 1678.186: [CMS-concurrent-abortable-preclean-start] 1678.365: [GC 1678.465: [ParNew: 2080530K->1464K(2044544K), 0.0127340 secs] 1389293K->306572K(2093120K), 0.0167509 secs] 1680.093: [CMS-concurrent-abortable-preclean: 1.052/1.907 secs] ....
??¨???é?¢GC?—¥??—??-???1678.186??ˉ??¨?o?AbortablePrecleané????μ?????¨é??????????°2s?°±??‘?”??o??????YGC??
5??FinalMarking????1???‘é???–°???è?°???STWè???¨???‰
èˉ¥é????μ?1???‘?‰§è???????¨?1??‰?????1?è??é????μ???GC?o??¨??’??o”?”¨?o??¨?????—??‰§è??????¥??ˉ”????|???¨?‰“?‰????é—′??????è????¨?‰”?o??±‘??‰?????ˉè???o§?”??–°???????”¨?…3?3??|???????
- è??1′??£????–°?ˉ1è±?è¢?GC Roots????”¨
- è??1′??£?????a???è?°?ˉ1è±?è¢??–°?”???£?ˉ1è±?????”¨
- è??1′??£?·2???è?°????ˉ1è±??¢?????–°????”¨?????‘è??1′??£?…?????ˉ1è±?
- ?–°?”???£?ˉ1è±??????‘è??1′??£????”¨è¢????é?¤
- ?1?è??è????‰?…??????…??μ..
???è?°?ˉ1è±???-??ˉè????‰???o??·2?????¨Precleaningé????μ?’?AbortablePrecleané????μè¢??¤????è???????????-???¨?2???¥??—????¤???????????‰??¥è????‰è??è???|????????¤???????
- é??????–°?”???£?ˉ1è±????é???–°???è?°
- ??1???GC Roots???é???–°???è?°
- é?????è??1′??£???Dirty Card???é???–°???è?°???è??é?????Dirty Card?¤§é?¨????·2?????¨cleané????μ?¤????è??
??¨??????-¥éa¤??-???é?è|?é??????–°?”???£????…¨é?¨?ˉ1è±?????|?????–°?”???£???????”¨??????é?????é?è|?é??????¤????????ˉ1è±??1?????¤????è???ˉ1?o?è????aé????μ?????è—?—???¥èˉ′?????ˉ??a???é??????????o??ˉè???¤§é??????ˉ1è±???ˉ????—??-??′???????è???”è???o??ˉ1è±??1???ˉè??????”¨?¤§é?????è??1′??£?ˉ1è±????é????????¤??o”èˉ¥????”????è??1′??£?ˉ1è±?è??2???‰è¢?????”????é?????é’??’????????°?1??¢????????°‘??‰????|??????¨AbortablePrecleané????μ??-è???¤???°?¥??????‘?”??????YGC???è????·?°±??ˉ??¥é???…??‰?????—????????ˉ1è±???
?|??????¨AbortablePrecleané????μ?2???¥??—????‰§è???????YGC??????1???????
CMS??—?3???-???????o?????a?????°???CMSScavengeBeforeRemark???é??è?¤?1??2???‰????ˉ????|????????ˉèˉ¥?????°?????¨?‰§è??èˉ¥é????μ?1??‰?????????o???è§|??‘?????YGC?????ˉ??¥????°‘?–°?”???£?ˉ1è±????é??????—?é—′???????”?????1???′????o?????1??
???è?????è???§??????°??‰?????‰???????????ˉé??????o?Remarké????μ??????é???—?é—′???????????ˉ??¨?–°?”???£?ˉ1è±?????°‘?????…??μ????1??¤??o??????YGC???????ˉ???????ˉ??¨AbortablePrecleané????μ?·2?????‘?”??o??????YGC???????????¨èˉ¥é????μ????????????è§|??‘???????
?‰??¥??????é?è|?????????
?????¨Old GC
è????a?????¨Old GC???è???¨????è§|??‘???????ˉ”è??è????????
- YGCè???¨???‘?”?Promotion Failed???è??è??ˉ1è??1′??£è??è??????”?
- ?ˉ”?|??‰§è???o?System.gc()????‰??????ˉ?2???‰?????°ExplicitGCInvokesConcurrent
- ?…??????…??μ…
?|????è§|??‘?o??????¨Old GC???è???—??‘¨????§Old GC?-£??¨?‰§è?????é?£?1?????¤oè???‘¨????§Old GC????‰§è???????????????a?—??????aè????‰???§???¨Old GC??¨è??è????‰????1?è?°??? concurrent mode failure ??–è… concurrent mode interrupted??
?????¨GC???§??—????é?è|???¤?–-??????GC??ˉ??|è|??ˉ1è??1′??£?????oé—′è??è??Compact????????oé???—?é—′????‘¨????§GC???é?????¤§é??????¢??‰???oé—′??‰?????¤?–-é?è?‘?????°?|???????
*should_compact = UseCMSCompactAtFullCollection && ((_full_gcs_since_conc_gc >= CMSFullGCsBeforeCompaction) || GCCause::is_user_requested_gc(gch->gc_cause()) || gch->incremental_collection_will_fail(true /* consult_young */));
??¨??‰?§???…??μ??????è??è???????????
- ?…???-?????°UseCMSCompactAtFullCollection(é??è?¤true)?’? CMSFullGCsBeforeCompaction(é??è?¤0)????‰??¥é??è?¤?ˉ????????????¨GCé??????ˉ1è??1′??£?????…?-???oé—′è??è????????????°±??ˉ????ˉ1è±??§???¨??°??…?-???????·|è?1??
- ??“????o?????ˉ”?|??‰§è???o?System.gc()????‰??????ˉ?2???‰?????°ExplicitGCInvokesConcurrent????1????è??è??????????
- ?|?????–°?”???£???????????…???????¤±è′¥??
??|????????¨????????—?3?????§°??oMSC??????è?°-??…???-?????????é???”¨????o??¨?????…¨??????????–1???è??è?????????”?é????????????—?é—′???é?????é??…
é?£?????|????????¨????????—?3???ˉ???1???·????‘¢???
?????|????????¨???????‰§è??é?è?‘???Foreground Collect?????′??aè???¨?????ˉ1?‘¨????§Old GC??¥èˉ′????°‘?o?Precleaning?’?AbortablePreclean??¤??aé????μ????…????è???¨?é???·?????¤???
?|?????‰§è??System.gc()???è???”?·?????o??????°ExplicitGCInvokesConcurrent???è???—??1?????±??o??????¨GC???????????¨è???‘¨????§Old GC???è??è??????ˉ”?|????????‰§è??è???????????1????????-‰2s????£??¥?????????è???ˉ???é????ˉ??¨?‘¨????§Old GC??
本文链接:https://www.zhantian9.com/232986.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2000000@qq.com 举报,一经查实,本站将立刻删除。