垃圾回收及收集器的浅析与总结

垃圾回收

如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商、不同版本的虚拟机所包含的垃圾收集器都可能会有很大差别,不同的虚拟机一般也都会提供各种参数供用户根据自己的应用特点和要求组合出各个内存分代所使用的收集器。

引用

强引用:普遍存在的引用赋值。
弱引用:有用,但不是必须的对象。第二次回收。
软引用:非必须。第一次回收。
虚引用:无影响。只为回收时通知。

分代收集

弱分代(新生代):很快被垃圾收集。
强分代(老年代):从多次垃圾收集中存活。
跨代引用:相互引用的关系,会倾向于共存亡。使用记忆集表示出老年代的哪一部分被跨代使用

标记清除算法

标记出要回收的对象。统一回收标记的对象

缺点

1.效率不稳定。数量越多,标记清除效率越低。
2.空间碎片化

标记-复制算法

划分一半的区域,每次使用一般区域。一块内存使用完,将存活对象按顺序复制到另一部分。.清除原来部分内存。

缺点

空间浪费

标记-整理算法

标记出要回收的对象,将存活对象整理到存储空间一端。清理掉边界外的内存

缺点

全程暂停用户应用程序

HotSopt的算法

根节点枚举

HotSpot使用OopMap数据结构确定对象引用。

安全点

开始垃圾收集的时间。分为抢先式中断和主动式中断

安全区域

对于没有分配处理器时间的程序,使用安全区域:扩展拉伸的安全点

记忆集和卡表

记忆集:记录非回收区域指向回收区域的指针集合的数据结构
卡表:记忆集的实现。指向卡页。元素变脏即对这一部分的卡页进行查找。

写屏障

使元素变脏的方法。分为前/后屏障。

三色标记

并发可达性的实现与优化。增量更新和原始快照解决对象消失问题。

垃圾收集器

Serial

ParNew

Parallel Scavenge收集器

与ParNew相似。目标:可控制的吞吐量

Serial Old

Parallel Old

基于标记-整理算法。

CMS收集器

1.初始标记(CMS initial mark):标记GC Roots

2.并发标记(CMS concurrent mark):遍历图

3.重新标记(CMS remark):修正并发标记期间的变动

4.并发清除(CMS concurrent sweep):清除标记的对象

Garbage First收集器

把Java堆划分为多个大小相等的Region,其中包含Humongous区域,存放大对象(Region的一半)。
根据各个region里面回收获得的空间大小和所需时间进行回收。优先处理收益最大的。
快Region引用对象:记忆集

低延迟垃圾收集器

Shenandoah收集器

G1继承者。

不同处

支持并发整理算法。

没有实现分代。

使用“连接矩阵”记录跨Region关系。

ZGC收集器

基于Region,但Region能够动态创建和销毁,容量也为动态。

垃圾收集器的选择

1.应用程序的关注点

2.运行程序的基础设施

3.使用JDK的发行商

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值