最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

美團(tuán)面試:CMS(Concurrent Mark Sweep)GC的工作原理和致

2023-04-12 18:04 作者:碼上加薪  | 我要投稿

易錯(cuò)點(diǎn):在用CMS做老年代的垃圾回收時(shí),GC Roots是一個(gè)廣義的GC Roots,包含年輕代的所有存活對(duì)象。

因此,在CMS的初始化標(biāo)記階段,除了標(biāo)記狹義的GC Roots到老年代的直接引用,還要標(biāo)記年輕代到老年代的直接引用。

JDK8源碼執(zhí)行路徑如下:

一 concurrentMarkSweepGeneration.cpp

定位到2343行,初始化標(biāo)記的入口:M_CMS_Initial_Mark initial_mark_op(this) ,進(jìn)一步跟進(jìn)去,進(jìn)入到第二步。

二 vmCMSOperations.cpp

跟進(jìn)去,找到:_collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsInitial, gch->gc_cause());這行代碼,再進(jìn)入到第三步。

三 concurrentMarkSweepGeneration.cpp

① 定位到6636行(具體的初始標(biāo)記工作),checkpointRootsInitial(true);

再往下跟進(jìn),跟進(jìn)到3746行,也就是“② gen_process_strong_roots”

② gen_process_strong_roots

用來處理直接從gc root直達(dá)的對(duì)象。

  // The serial version.
      CMKlassClosure klass_closure(&notOlder);
      gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel.
      gch->gen_process_strong_roots(_cmsGen->level(),
                                    true,   // younger gens are roots
                                    true,   // activate StrongRootsScope
                                    false,  // not scavenging
                                    SharedHeap::ScanningOption(roots_scanning_options()),
                                    &notOlder,
                                    true,   // walk all of code cache if (so & SO_CodeCache)
                                    NULL,
                                    &klass_closure);
    }

跟著gen_process_roots下去后,可以看到gen_process_roots,用來處理直接從gc root直達(dá)的對(duì)象。

所以,現(xiàn)在搞清楚GC Roots的定義了,因此,在做CMS GC時(shí),GC Roots除了一般定義的節(jié)點(diǎn)外,還需要加上從年輕代到老年代的引用。

美團(tuán)面試:CMS(Concurrent Mark Sweep)GC的工作原理和致的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
介休市| 抚宁县| 渭南市| 江城| 闽清县| 察雅县| 五寨县| 高唐县| 绿春县| 中西区| 正定县| 阿巴嘎旗| 云浮市| 吴旗县| 通道| 深泽县| 张家口市| 怀来县| 饶阳县| 博野县| 永年县| 浑源县| 唐海县| 交城县| 麦盖提县| 曲水县| 高要市| 彭泽县| 通化县| 南和县| 格尔木市| 大竹县| 商丘市| 阿城市| 乌苏市| 阿勒泰市| 永胜县| 巴东县| 金沙县| 常山县| 景泰县|