JVM垃圾回收算法和垃圾回收器
判断对象的存活:
引用计数法,优点,快方便,简单,缺点对象互相引用,很难判断该对象是否回收
可达性分析(java中使用):
通过GCRoots,当一个对象到GCRoots没有任何引用链相连,则证明此对象不可用
finalize,使对象不被jvm回收,但是jvm不能保证
各种引用
强引用:=赋值的
软引用SoftReference:
垃圾回收器在内存充足的情况下不去回收它,在内存不足时才去回收
弱引用WeakReference:
垃圾回收器扫描到该对象的时候,无论内存是否充足,都会将该对象回收
虚引用PhantomReference
幽灵引用,最弱,被垃圾回收的时候收到一个通知
GC
MinorGC:
特点发生在新生代,发生的较频繁,执行速度较快
触发条件:Eden空间不足
Full GC
主要发生在老年代,(新生代也会回收)较少发生,执行速度慢
垃圾回收算法
复制算法:
HotSpot虚拟机新生代的比例是8:1:1,也是因为复制算法
标记清楚算法:
首先标记所需要回收的对象
统一回收被标记的对象
标记个清除的效率都不高,会产生不连续的内存碎片
标记整理算法:
标记回收,然后在整理
垃圾回收器
分代收集器:新生用复制,老年代用标记
并行:垃圾收集的多线程同事进行
并发:垃圾收集的多线程,和应用的多线程同时进行
Concurrent Mark Sweep CMS
注重响应性能
垃圾回收的四个过程
优点是和用户线程一起工作,缺点,cpu资源敏感,有浮动垃圾,会产生空间碎片
G1垃圾回收器
G1把堆划分成多个大小相等的区域,新生代和老年代不在物理隔离
G1的模式:Yong GC,用于新生代,复制算法
Mixed GC 不是Full GC
优点:空间整合,可预测的停顿
STW 是什么呢?
Stop The World
GC收集器个我们的GC调优的目标就是尽可能减少STW的时间个次数