判定对象为垃圾对象的方法
-
引用计数法
对象每被引用一次,计数器加1,每减少一个引用,计数器减1,当计数器为0,可视为垃圾对象,可以被GC掉 -
可达性分析
从虚拟机栈,本地方法栈,方法区出发遍历整个堆区,处于连通区的对象是不可回收的,不处于连通区的是可以GC的对象
回收策略
-
标记清除算法
分为两个过程,首先标记出可清除的区域,之后进行清除,缺点产生大量内存碎片 -
复制算法
将内存分为两块A,B,每次将存活的对象复制到另一块(比如a->b),之后将整块区域清除(a),缺点内存缩小了一半 -
标记整理算法
和标记清除算法一样,首先对可清除对象进行标记,之后将存活对象复制到内存的一端,再对边界以外的内存进行清理 -
分代收集算法
新生代:在堆区,局部变量等,新生代占堆区的1/3,内部分为3块,Eden(80%)两块Survivor(每个10%),GC时,会把1个survivor和eden中存活的对象复制到另一个survivor区域,之后清空eden和1个survivor
老年代:在堆区,存活比较久,但还是会死亡,占堆区的2/3,使用标记整理算法
永久代:在方法区,对象生成后几乎不灭的对象,如类加载信息 -
分代依据
1)大对象直接进入老年代
2)新new的对象进入Eden区域
3)GC时,将Eden和已被用的Survivor中的存活对象复制到清空的Survivor中
4)清空已被用的Survivor