关于Java对象生命周期,下列代码运行后有多少对象符合垃圾回收条件? ``` class Node { Node next; } void create() { Node n1 = new Node(); Node n2 = new Node(); n1.next = n2; n2.next = n1; n1 = null; Node n3 = new Node(); } ```

答案解析

### 核心考点说明 本题考察循环引用场景下的垃圾回收判定,需理解可达性分析算法和GC Roots概念。 ### 解题思路分析 1. `n1`与`n2`形成循环引用,但`n1`被置为null后失去GC Roots引用 2. `n3`在方法结束时仍被局部变量引用(未置null) 3. 方法内创建3个对象:n1原对象、n2、n3 ### 选项详细分析 - **A**:错误。认为循环引用阻止回收,但Java使用可达性分析而非引用计数 - **B**:正确。n1原对象和n2因无GC Roots引用可被回收 - **C**:错误。误将n3算入可回收对象,但方法未结束前n3仍被引用 - **D**:错误。所有对象均被错误标记为可回收 ### 易错点提醒 - 循环引用对象若无GC Roots可达,仍会被回收 - 局部变量在方法执行期间始终持有引用
正确答案:B
随机推荐
开始刷题