JVM · 单选题 · 第 25 题
Java 后端开发面试 · 第 25 题
可达性分析算法中,下列哪一项可以作为 GC Roots?
- A堆中只被其他不可达对象引用的对象
- B上一次垃圾回收时已经被回收的对象
- C新生代中任意一个刚刚创建的对象
- D虚拟机栈中局部变量引用的对象
答案
D D. 虚拟机栈中局部变量引用的对象
解析
GC Roots 包括:栈帧中局部变量引用的对象、类静态变量引用的对象、常量引用的对象、JNI 引用的对象、被同步锁持有的对象等。从 GC Roots 出发走不到的对象就是可回收的,即使它们之间相互引用。这也是 Java 不用引用计数的原因,引用计数解决不了循环引用。