学习笔记 2021.10.26
2021/10/26 23:15:32
本文主要是介绍学习笔记 2021.10.26,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
2021.10.26
JVM
垃圾回收器
Parallel回收器
概述
- 与parnew主要的区别就是对控制量的要求有区别,其实也可以发现其他的方面很多都是一样的。
- 注意就是高吞吐量的注重就是不能够有太多的交互。后台运算的例子也如上图所示。
- parallel old除了在并行上的区别话,也没有更多的新东西了。
- 在程序吞吐量优先的情况下,这个垃圾回收器组合是很适用的。
该垃圾回收器相关的参数设置
- parallel的新生代和老年代的垃圾回收器是配套激活的。
- 关于cpu数量和并行线程数的设计也根据实际情况而定即可。
- 自适应调节开启后会尽可能使垃圾回收器满足吞吐量的要求。
- 是一种自动实现的功能,能够自动的去调节堆中空间的比例。
CMS垃圾回收器(重在低延迟)
基本的工作原理:
- 初始标记阶段会将所有的进程停了,主要任务在于标记出GC roots能够直接关联到的对象,因此虽然是stw的,但由于操作量比较小,所以速度非常快。
- 并发标记时即从上面的对象开始遍历整个链的过程,虽然时间长但是不消耗用户线程。
- 重新标记,用于修正具体过程见下图
- 并发清理阶段即是删除掉那些已经标记死亡的对象,释放内存空间,该过程也是并发的。此时也可以注意到因为只进行了标记清除,随意最后会存在碎片化的内存空间,后面存储时要采用空闲列表的方式。
一些其他的相关注意点:
为什么不用标记清除压缩算法的原因
反正就是要保证并发的特性,即不能够影响其他正在进行的线程。
总结:
- 浮动垃圾即是在并发标记阶段新产生的垃圾。
CMS设置中相关的一些参数设置,有个印象即可,毕竟是现在已经淘汰的垃圾回收器了。
已知垃圾回收器的总结:
老年代的垃圾回收器自然也是配套的。
G1垃圾回收器(现在的默认垃圾回收器)
引入的原因?
需要更好的暂停时间和吞吐量的折衷。
命名为G first的原因:
- 回收价值最大的意思即是回收过后回收对象最多的区域。
- G1是面向服务端的垃圾回收器。主要针对配备多核cpu及大容量内存的机器,以同时满足两种指标。
常见的使用场景
G1的优点
- 并行与并发:
- 分代收集
即将堆空间的划分都直接变化了。
此时分区就不要求内存空间连续并且固定是哪种了,具体示例见下图。此时每一个单位就叫region。
其中Humongous主要用于存储大对象,如果超过1.5个region,则放到这个区。
- 空间整合
- 可预测的停顿时间模型:
其中价值最大的region的定义前面也已经有提到过了。
G1的缺点
即G1需要占用额外的内存空间。
G1的参数设置
具体的应用有需求时再看,这里有个概念知道即可。
- 在设置最大停顿时间这,也不是说越小越好,太小的话会导致每次垃圾收集时选择的收集的区域就很少,进而会造成内存空间的堆积。
- 一般使用时就三步:开启垃圾回收器、设置堆的最大内存、设置最大的停顿时间。剩下的都会自动去处理。
region的使用介绍
堆中region每个的大小都相同,且生命周期都不会被改变。虽然还保留着新生代老年代的区别,但不再是物理隔离的了,通过region动态分配的方式来实现逻辑上的连续。
额外的需要注意的一点:
每个region的图例:
即有个指针指向当前空的位置。
回收的主要过程细节:
主要包含以下三个环节
最后一点即是不得不强制执行full GC的时候。
整体的说明:
记忆集:即G1需要的额外的执行空间
具体示例
即额外多开辟一块空间用于记录引用了该对象的region。从而在后面的回收过程中不用全部遍历了。
回收过程一:年轻代GC
- 当且仅当伊甸区耗尽时才会触发,s区的垃圾回收都是被动触发的。
上图即体现了新生代几种的转移过程,包括到s区以及从s区到老年区等等。
具体的回收过程
年轻代GC
- 记忆集主要就是年轻代GC这里使用,因为后面都是一起调用的。
- 脏卡表用于记录对象间的各种引用,然后是记录后统一处理,更新rset。
- 最终伊甸区为空,就放入空闲列表中用于后面的使用。
- 这一步是一个独占式的GC。
并发标记过程
- 二的原因即是youg GC会动s区
- 三中蓝色的部分也叫做实时回收。
- 再次标记即是对前面并发过程新产生的处理。
混合回收
蓝色部分即是G1特性的体现,保证延时足够的情况下尽可能的去回收更多的对象。具体region选择的指标根据前面的过程做出判断。
更多细节:
可能触发的第四个过程:full GC
G1的优化建议
垃圾回收器的总结和比较
一些常规的建议,不针对具体场景
简单的给出的性能指标,作为一个简单的指导即可。
- 没有最好的收集器,更没有万能的收集
- 具体问题具体分析,调优永远是针对具体场景和需求。
GC日志相关查看和配置
后面有具体的实践再去细了解,这里知道有这么个东西即可。
包括一些日志中特定名词的解释,反正相信没有什么东西是没学过,简单对应下都可以知道的。
就贴两个图作为参考即可
minor GC
Full GC
包括还有用于日志分析的工具,都在视频中又谈到,有需要时再去进行参考。
未来新科技GC
shenandoah和ZGC。后面再去慢慢了解吧。反正时刻关注最新科技的发展即可。
这篇关于学习笔记 2021.10.26的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南