​​摘要:知道三色符号吗?是红黄蓝三色符号吗?

本文共享自华为云社区《从三色符号说开去》,原文作者:java 初中生。

【1】关于三色符号

线程池的创建办法有几种几天,公司暂时派我去面试一个 java 实习生,由于没有这方面的任何经历,所以一不安全手抄报小心,我就问超纲安全手抄报了。

问过了 java 基线程是什么意思础,我随口又问了一句,知道三色符号吗?

他显然是懵逼面试毛遂自荐范文了一瞬间,但也只是一瞬间,然后振振有词地反问,是红黄蓝三色符号吗?

这却是反把我问住了。

面试有问题答不出来,这其实可以了安全期计算器解,不明白就说不明白,不会就说不会,子早年曰过,知之为知之。

三色符号,正派来说,就只有黑白灰三个颜色。

但实际上,三色符号,和颜色其实没有任何联络,只与一次扫描情况相关

  • 黑色节点,代表根节点或许数组词已扫描完的节点,该节点的子节点也被扫描完;

  • 灰色节点,代表已扫描完的节点,该节点的子节点存在未被扫描的情况;

  • 白色节点,代表未被扫描的节点。

三色符号原理,我给应聘者问懵了...

上图中,A 便是黑色节点,B 为灰色,因面试毛遂自荐为 B 的子节点 C 未被扫描,C 则是白色节点。

假定,扫描完毕,C 依旧是算法导论白色,则 C 被收回。

但这里会存在一个问题,假定在上图的情况下,BC 的引证断掉,而 AC 的引证被建立,如下图:

三色符号原理,我给应聘者问懵了...

则会出现以下情况:

  • B 扫描完,无引证,变黑。

  • C,按道理说,安全教育手抄报也会变灰,然后变黑。

  • 但 A 此时已经是黑色节点,则不会扫描其引证,所以 C 不会被扫描,仍是白色。

  • 最后,C 会被当废物回安全期收。

这显然是一个误操作,由于 C 当时是根数组的界说可达的,那该问题怎样办呢?

常用的废物收回器,CMS 和 G1 都给出了解决方案。

CMS 的安全教育日办法叫做 Incremental Update 算法。

该算法从作用下手,判别扫描完毕时,是否有白色政策被黑色政策引证,假定被引证,则经过 write barrier 写屏障技术,把黑色的政策从头符号为灰色,然后从头扫描。

三色符号原理,我给应聘者问懵了...

G1 的线程池面试题办法叫做 SATB 算法。

该算法从源头下手,GC 初步之前拍摄快照,设定全部存在引证的政策,都是存活的。

GC 扫描之后,再次拍摄快照,将新引证的存活政策符号。

然后将快照叠加。

三色符号原理,我给应聘者问懵了...

这样,C 显现的是被 A,B 两个政策引证。

但这样会有一个害处,假定此时,AC 之间的引证安全教育渠道登录进口没有被建立,则 C 原本应该被收回,但此轮却并没有被收回。

【2】跨代引证的问题

跨代引证这个概念被提出来的时分,很多人都有似曾相识的感觉。但详细要说,很多人就说不出所以然来了。

其实,java 堆安全期是哪几天说到底就两个代(面试毛遂自荐简略大方年青代和老时代),耐久代在 jdk 的某个版别后,就被放到本地办法栈了。

跨代引证算法分析的目的是,即父节点在一个代,而引证政策在另一个代。

线程池的创建办法有几种般来说,父节点都在老时代,引证政策在年青代。

三色符号原理,我给应聘者问懵了...

如上图,X 引证和 Y 引证都是归于跨代引证。安全教育渠道登录进口

跨代引证一般多发生在 G1 收回器中,由于 G1 的内存选用分块的面试毛遂自荐一分钟形式,内存区域不稳定

那么,年青代收回(young GC)时,是否要数组去重依据可达性分析,遍历全部的老时代关联,直到根节点呢。

不需要。

只需父节点在老时代,则一概视为根节点。

在这里(跨代引证)要引进两个概念,作用集和卡表。卡表可以看作一个老时代分区安全期的调集或许数组,如下图。

三色符号原理,我给应聘者问懵了...

作用集,便是一组类似于 map 的容器,key 存放卡表的下标,value 存放引证联络

三色符号原理,我给应聘者问懵了...

想想这样做的长处是什么?

【3】数组初始化安全点和安全区域

java算法的五个特性 作业线程和废物收回线程,一般情况下,是不能一同算法的时刻复杂度是指什么进行的。

一般教师讲到这个问题的数组指针时分,会打个比方:吃饭和洗碗擦桌子。

之所以作业线程和废物收回线程不能一同数组和链表的差异进行,是由于人不安全教育日是哪一天能一边吃线程池面试题饭一边拾掇碗筷(触手怪在外)。

同理,还有一个问题,你也不能把饭吃到一半,把碗拿过去洗。

所以,你必须在吃完饭的时分算法的有穷性是指,洗碗。

吃完饭的这个时刻,便是安全点。

一般来说,安全点是某个线程的完毕或许间线程池断的时刻,可所以数组办法调用,循环跳转,反常跳转等。

再回面试问题算法是什么说说废物收回的全过程。

  • 事务线程履数组和链表的差异行过程中,会不断轮询一个标志位,该标志位处于废物收回线程中;

  • 假定需要做废物安全期计算器收回,收回线程会将标志位改掉面试常见问题及回答技巧

  • 事务线程收到标志位信息,会走到安全点,然后中止;

  • 废物收回线程发起,收回废物。

三色符号原理,我给应聘者问懵了...

那么,安全区域是什么呢?

一个区域全部的线程的生命周期安全教育日是哪一天都是安全点,这一部分便是安全区域。

仍是拿原来那个比方,假定你晚上减肥,不想吃饭,碗什么的,随时都可以洗面试毛遂自荐

【4】怎样检查 GC 日志

直接上指令:-XX+PrintGCDetails。

该指令可以在控制台打印 GC 日志。

日志内容如下:

三色符号原理,我给应聘者问懵了...

【5】终算法的有穷性是指:废物收回各政策

吞吐量:指在算法的时刻复杂度取决于运用程序的生命周期内,运用程序所花费的时刻和体系总作业时刻的比值。

公式:吞吐量=体系运用时刻/体系总作业时刻

废物收回器负载:和吞吐面试毛遂自荐量正好相反,废物收回器负载指废物收回器耗时与体系作业数组词总时刻的比值。

公式:吞吐量=废物收回时刻数组公式/体系总作业时刻

中止时刻(推迟):指废物收回器面试毛遂自荐正在作业时,运用程序的暂停时刻。

PS:独占收回器推迟长,但吞吐量高,并发收回器,推迟少,但吞吐量低。

废物收回频率:指废物收回器多长时刻会作业一次。

PS:废物收回器的频率应该是越低越好。

反应时刻:指当一个政策被称为废物后多长时刻内,它所占有的内存空间会被开释。

PS:即废物收回的周期

over~~

堆分安全教育渠道:不同的废数组初始化物收回器对堆内存的面试技巧分配办法可能是不同的面试毛遂自荐。一个杰出的废物收集器应该有一个合理的堆内存区间区别。

本文参考资料:blog.csdn.net/xingkongjuh…

点击注重算法导论,第一时刻了解华为云新鲜技术~