本文首发于cartoon的博客
转载请注明出处:https://cartoonyu.github.io/c...
怎么判断对象是否可以被回收
根搜索法
判断是否有finalize方法或是否进行过finalize
- 满足上面判断条件直接回收
- 若不满足则进行筛选
- 执行对象的finalize方法,判断对象是否和GC Roots是否有直接或间接关联
引用计数法
- 每次引用计数加1
- 回收时查看计数是否为0
Java 中都有哪些引用类型
强引用
- 内存空间不足也不会回收
软引用
- 内存空间不足会回收该引用
弱引用
- 在垃圾回收期扫描时,不管内存是否不足都会回收引用
虚引用
- 在任何时候都可能被回收
说一下 JVM 有哪些垃圾回收算法
标记-清除
- 标记可回收对象进行清理
标记整理
- 标记可回收对象
- 将存活对象整理到连续内存空间,清除边界外内存
复制算法
- 将不可回收对象复制到另一内存空间中
- 清理原有内存空间
分代收集算法
- 根据对象存活周期不同划分内存块
- 垃圾回收机制根据代数不同回收对象
说一下 JVM 有哪些垃圾回收器
- serial
- parnew
- parallel Scavenge
- serial old
- parallel old
- cms
- G1
- 由于是初步接触JVM,所以不是很了解JVM垃圾回收器的工作原理