1.OpenJDK17-JVM 源码阅读 - ZGC - 并发标记 | 京东物流技术团队
2.FREE SOLO - 自己动手实现Raft - 17 - leveldb源码分析与调试-3
3.Linux内核涵盖了多少行源代码linux内核多少行代码
OpenJDK17-JVM 源码阅读 - ZGC - 并发标记 | 京东物流技术团队
ZGC简介:
ZGC是源码Java垃圾回收器的前沿技术,支持低延迟、源码大容量堆、源码染色指针、源码读屏障等特性,源码自JDK起作为试验特性,源码黑马均线源码JDK起支持Windows,源码JDK正式投入生产使用。源码在JDK中已实现分代收集,源码预计不久将发布,源码性能将更优秀。源码
ZGC特征:
1. 低延迟
2. 大容量堆
3. 染色指针
4. 读屏障
并发标记过程:
ZGC并发标记主要分为三个阶段:初始标记、源码并发标记/重映射、源码重分配。源码learun7.0.6源码下载本篇主要分析并发标记/重映射部分源代码。源码
入口与并发标记:
整个ZGC源码入口是ZDriver::gc函数,其中concurrent()是一个宏定义。并发标记函数是concurrent_mark。
并发标记流程:
从ZHeap::heap()进入mark函数,使用任务框架执行任务逻辑在ZMarkTask里,具体执行函数是work。工作逻辑循环从标记条带中取出数据,直到取完或时间到。此循环即为ZGC三色标记主循环。之后进入drain函数,从栈中取出指针进行标记,直到栈排空。啦啦外卖源码路径标记过程包括从栈取数据,标记和递归标记。
标记与迭代:
标记过程涉及对象迭代遍历。标记流程中,ZGC通过map存储对象地址的finalizable和inc_live信息。map大小约为堆中对象对齐大小的二分之一。接着通过oop_iterate函数对对象中的指针进行迭代,使用ZMarkBarrierOopClosure作为读屏障,实现了指针自愈和防止漏标。
读屏障细节:
ZMarkBarrierOopClosure函数在标记非静态成员变量的指针时触发读屏障。慢路径处理和指针自愈是核心逻辑,慢路径标记指针,快速路径通过cas操作修复坏指针,最牛CCI源码指标并重新标记。
重映射过程:
读屏障触发标记后,对象被推入栈中,下次标记循环时取出。ZGC并发标记流程至此结束。
问题回顾:
本文解答了ZGC如何标记指针、三色标记过程、如何防止漏标、指针自愈和并发重映射过程的问题。
扩展思考:
ZGC在指针上标记,当回收某个region时,如何得知对象是否存活?答案需要结合标记阶段和重分配阶段的代码。
结束语:
本文深入分析了ZGC并发标记的流媒体商业直播源码源码细节,对您有启发或帮助的话,请多多点赞支持。作者:京东物流 刘家存,来源:京东云开发者社区 自猿其说 Tech。转载请注明来源。
FREE SOLO - 自己动手实现Raft - - leveldb源码分析与调试-3
leveldb的数据流动路径是单向的,从内存中的memtable流向不可变的memtable,最终写入到磁盘上的sorted table文件中。以下是几个关键状态的分析,来了解内存和磁盘上数据的分布。
以下是分析所涉及的状态:
1. 数据全在内存中
随机写入条数据,观察到数据全部存储在memtable中,此时还没有进行compaction操作。
2. 数据全在磁盘中
写入大量数据,并等待数据完全落盘后重启leveldb。此时,数据全部存储在磁盘中,分布在不同的level中。在每个level的sstable文件中,可以看到key的最大值与最小值。
3. 数据部分在内存中,部分在磁盘中
随机写入条数据,发现内存中的memtable已满,触发compaction操作,数据开始写入到sstable文件。同时,继续写入的数据由于还未达到memtable上限,仍然保存在内存中。
4. 总结
通过观察不同数据写入量导致的数据在内存与磁盘间的流动,我们可以看到leveldb内部状态的转换。
下篇文章将分析LRUCache数据状态的变化。敬请期待!
Linux内核涵盖了多少行源代码linux内核多少行代码
随着定义性的系统内核,Linux内核是一个重要的核心技术创新因素,它构建在令人印象深刻的源代码之上。今天,Linux内核已经完成了它高度可定制化和通用性品质的最新版本,非常稳定。问题是,涵盖了多少行源代码?
首先,在年,Linux内核源代码已经达到了,,行。这非常惊人,远超其他开源项目,甚至比Microsoft Windows内核拥有更多的源代码。自年以来,Linux内核行数翻番,从最初的1,,行到年的纪录高度。
此外,遵循Linux内核自由和开放源代码许可证(GPL)的强大规范,迅速增加了源代码的行数。它的主要目的是从发行版和补丁集无限采用修改版本源代码,以方便系统管理员应用它们。GPL只要强调,任何Linux内核的更新或修改版本都必须以根据Ctrl-GPL的免费方式传播。
另外,每个Linux内核开发者贡献的源代码行数也在增长。其中,Linus Torvalds登记了最多的,行,阿兰吉特(Andrew Morton)排名第二,写了大约,行。其余的Linux内核贡献者以负责任的方式编写源代码,以提高Linux内核的性能并利用它的好处。
总之,Linux内核的源代码已经很长,非常惊人。借助强大的GPL协议和大量贡献者,当前每版本Linux内核已经完成了大约,,行强大的源代码,管理员乐此不疲地使用它们。