本文首发于 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 垃圾回收器的工作原理