徐无忌深入JVM虚拟机笔记:垃圾回收算法有哪些,每个算法各自有何优劣?

徐无忌深入JVM虚拟机笔记:垃圾回收算法有哪些,每个算法各自有何优劣?

完成:第一遍

1.Java中有哪两种垃圾回收机制?

思想是如何确定哪些对象是需要被回收的
垃圾回收机制确认了哪些对象需要回收
垃圾回收算法决定了回收的操作过程

第一种垃圾回收机制:引用计数法

原理:当对象被引用,程序计数器+1;释放-1;当为0时证明对象未被引用,可回收

第二种垃圾回收机制:可达性分析法

原理:通过一些列称之为“GC Roots” 的对象作为起点;从此起点向下搜索,所走过的路径称之为引用链,当一个对象到 GC Roots 没有任何引用链相连接,代表此对象不可达

2.引用计数法机制有什么明显的缺陷?

缺陷:对于循环互相引用的情况下,对象不会被回收

例如:对象A引用对象B,对象B又引用对象A,类似死锁似的循环相互引用
没有其他的对象引用A和B,但是A和B都不会被回收

3.可达性分析法中Java 可以作为GC Roots 的对象有哪四类?

第一类:虚拟机栈(帧栈中的局部变量表)中的引用对象;

第二类:类静态属性引用的对象;

第三类:常量引用的对象;

第四类:本地方法栈中JNI (Java Native Interface即一般说的 Native 方法) 的引用对象;

4.Java中有哪三大垃圾回收算法?

第一种回收算法:标记-清理算法
原理:在GC时候,先进行扫描,把需要清理的无用对象进行标记
然后将这些对象直接清理

缺点:产生内存碎片,举例:如果清理了两个1kb的对象,再添加一个2kb的对象,无法放入这两个空置的被清理的只有1KB大小的位置

第二种回收算法:标记-整理算法(老年代使用)
原理:在标记-清理的基础上,清理完成后,将内存空间进行整理,使空间紧凑排列,解决了内存碎片的问题
然后将这些对象直接清理

缺点:开销较大

第三种回收算法:复制算法(新生代使用)
原理:将空间一分为二,在清理时,将需要保留的对象复制到第二块区域上,复制的时候直接紧凑排列,然后把原来的一块区域清空

缺点:浪费空间

你可能感兴趣的:(JVM虚拟机,java)