垃圾收集器与内存分配策略

判断对象是否存活

引用计数算法

给对象添加一个引用计数器,每当被引用时,计数器值加1,当引用失效时,计数器值减1.为0时则没有被引用
难以解决对象之间相互循环使用的问题

objA.instance = objB;
objB.instance = objA;

objA = null;
objB = null;

可达性分析算法

通过一系列称为”GC Roots”的对象作为起始点,向下搜索,走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,可回收

垃圾收集算法

标记-清除算法(Mark-Sweep)

先标记后清除
存在效率问题和空间问题

复制算法

将可用内存容量划分为大小相等的两块,每次使用其中一块,用完后复制存活对象到另一块,然后全部清除正在使用的内存块

标记-整理算法

让所有存活的对象都向一端移动,然后直接清理掉端边界外的内存

分代收集算法

根据存活周期的不同将内存划分为几块
新生代对象存活率低,复制算法
老年代对象存活率高,”标记-清理”或”标记-整理”算法

垃圾收集器

Serial收集器

单线程收集器,简单而高效

ParNew收集器

多线程收集

Parallel Scavenge收集器

新生代收集器,使用复制算法
目标是达到一个可控制的吞吐量,”吞吐量优先”
不能与CMS收集器配合使用

Serial Old收集器

Serial收集器的老年代版本

Parallel Old收集器

Parallel Scavenge收集器的老年代版本,

CMS收集器(Concurrent Mark Sweep)

以获取最短回收停顿时间为目标的收集器,老年代

G1收集器(Garbage-First)

每次根据允许的收集时间,优先回收价值最大的Region
新生代和老年代

内存分配与回收策略

  • 对象优先在Eden分配
  • 大对象直接进入老年代
  • 长期存活的对象将进入老年代

新生代GC (Minor GC):发生在新生代的垃圾收集动作,速度快

老年代GC (Major GC/ Full GC):发生在老年代的GC,速度慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值