jvm(垃圾回收)
2021-07-06 13:04:27 2 举报
AI智能生成
详细的介绍了Java虚拟机中垃圾回收的相关知识点。
作者其他创作
大纲/内容
垃圾回收算法
标记-清除
缺点
标记-复制
优点
缺点
应用场景
1.年轻代
2.垃圾较多
标记-压缩
概括
应用场景
1.老年代
分代垃圾回收
把堆内存划分为老年代和年轻代,不同的位置使用不同的算法搭配使用。
垃圾收集器
垃圾收集器组合关系
7中经典垃圾回收器
年轻代垃圾回收器
Serial Gc
运行方式
分析
serial收集器使用复制算法、串行回收和‘stop-thw-world’机制方式执行内存回收。
简单高效(在单核cpu下)
搭配Serial old Gc(标记-整理)回收
存在问题
串行回收、stw时间长,程序卡顿时间长
使用场景
运行在client模式下的默认垃圾回收器
用户的桌面应用场景,可用内存一般不大(几十MB到一两百MB)
ParNew Gc
分析
是Serial Gc 的多线程版本,除了使用并行回收垃圾外,两种收集器没有区别,使用标记-复制算法。
在很多jvm运行在server模式下的新生代的默认垃圾收集器
在多cpu环境下,可以充分利用CPU资源,提高程序吞吐量。但是在单CPU下,运行速度不比Serial gc高
搭配Serial old Gc垃圾回收
运行方式
Parallel Scavenger Gc(吞吐量优先)
运行方式
分析
使用复制算法、并行回收和‘stop the world’机制
有了parNew ,为什么还要有parallelscavenge
和parNew gc 不同之处在于,parallel Scavenga目标是达到可控制的吞吐量
自适应调节策略也是和parNew 的重要区别
JDK8中默认的垃圾回收器
应用场景
高吞吐量可以高效的利用cpu时间,尽快完成程序的运算任务。常用在服务器环境中使用,例如:订单处理、工资支付等。
老年代垃圾回收器
CSM(低时延)
运行方式
gc过程
- 初始标记(Initial-Mark)阶段:在这个阶段中,程序中所有的工作线程都将会因为“Stop-the-World”机制而出现短暂的暂停,这个阶段的主要任务仅仅只是标记出GCRoots能直接关联到的对象。一旦标记完成之后就会恢复之前被暂停的所有应用线程。由于直接关联对象比较小,所以这里的速度非常快。
- 并发标记(Concurrent-Mark) 阶段:从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行。
- 重新标记(Remark)阶段:由于在并发标记阶段中,程序的工作线程会和垃圾收集线程同时运行或者交叉运行,因此为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间通常会比初始标记阶段稍长一些,但也远比并发标记阶段的时间短。
- 并发清除(Concurrent - Sweep) 阶段:此阶段清理删除掉标记阶段判断的已经死亡的对象,释放内存空间。由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的
优缺点
concurrent mode failure
使用场景
Serial old Gc
采用标记-压缩算法、串行回收和stop thw world机制
client模式下默认的老年代垃圾回收器
server模式下有两个用途
与新生代parallel Scavenge配合使用
作为老年代CMS收集器的后备垃圾收集方案
Parallel old Gc
采用标记-压缩算法、并行回收和stop the world机制
年轻代、老年代都可回收
Garbage First(G1)
G1内存模型
如何判断对象是否可回收?
第一种、引用计数器算法:
第二种、根搜索算法-可达性分析算法:
概括
可作为GCRoots对象有哪些
1.虚拟机栈帧上本地变量表中的引用对象(方法参数、局部变量、临时变量)
2.方法区中的静态属性引用类型对象、常量引用对象
3.本地方法栈中的引用对象(Native方法的引用对象)
4.Java虚拟机内部的引用对象,如异常对象、系统类加载器等
5.所有被同步锁(synchronize)持有的对象
6.Java虚拟机内部情况的注册回调、本地缓存等
2.方法区中的静态属性引用类型对象、常量引用对象
3.本地方法栈中的引用对象(Native方法的引用对象)
4.Java虚拟机内部的引用对象,如异常对象、系统类加载器等
5.所有被同步锁(synchronize)持有的对象
6.Java虚拟机内部情况的注册回调、本地缓存等
0 条评论
下一页