GC作用区域:方法区+堆
GC(又称):分代收集算法
GC之引用计数法
给每一个对象分配一个计数器,若某对象用了0次,即会被当做垃圾清除。
GC之复制算法
每次GC都会将Eden存活的对象移到幸存区,Eden被GC后就空了
新生区
主要用的复制算法
- 优点:没有内存碎片
- 缺点:浪费内存空间,多了一般空间永远是空的(to区)
GC之标记压缩清除算法
标记清除算法
过程: 回收的时候对存活对象进行标记,然后对没有标记的对象进行清除。
- 优点:不需要额外的空间
- 缺点:两次扫描,造成时间浪费,会产生内存碎片。
标记压缩算法
再次优化
压缩:防止内存碎片产生。再次扫描,向一端移动存活对象。
缺点:多了一个移动成本。
总结
内存效率:复制算法 > 标记清除算法 > 标记压缩算法(时间复杂度)
内存整齐度:复制算法 = 标记压缩算法 > 标记清除算法
内存利用率:标记压缩算法 = 标记清除算法 > 复制算法
年轻代:
- 存活率低 --> 复制算法
老年代:
- 区域大、存活率高 --> 标记清除(内存碎片少) + 标记压缩混合