java - 符合垃圾回收条件的对象数量

标签 java garbage-collection

我不确定我是否完全理解垃圾收集器的行为,因此我基于previous question提出这个问题。 .

在此程序中:

class A {
    Boolean b;
    A easyMethod(A a){
       return new A();
    }
    public static void main(String [] args){
        A a1 = new A();
        A a2 = new A();
        A a3 = new A();
        a3 = a1.easyMethod(a2);
        a1 = null;
        // Some other code 
    }
} 

有多少对象有资格进行垃圾回收?我认为虽然 a3 永远不会变成 null,但分配给它的第一个对象 (new A()) 也应该被垃圾收集,因为没有引用仍然指向它。我对吗?因此我认为正确的答案仍然是 2 个对象。到底什么是真实的?

最佳答案

I think that although a3 never becomes null, the first object (new A()) assigned to it should also be garbage-collected, as no references still point to it. Am I right? I think hence that the correct answer would be again 2 objects.

是的,这是完全正确的。 a3 最初指向 A 的一个实例,但是在该变量被重新分配以指向另一个实例之后,不再有任何方法可以到达原始实例,所以说原始实例有资格进行垃圾回收。

关于java - 符合垃圾回收条件的对象数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369442/

相关文章:

winforms - 拖放如何影响 Windows 窗体应用程序中的内存使用?

memory-leaks - 第 2 代堆和大对象堆爬升

Java代码将字节转换为十六进制

java - "vm thread"在 JDK 1.6 中的作用是什么

go - 在 Go 中什么时候仅通过 `uintptr` 引用对象是安全的?

java - 处理流 java 8 中的异常

java - 使用 VM 命令行在执行期间找到最大分配的堆大小?

java - 尝试检索 session 变量中的数组列表

java - Spring Boot 中未调用 Spring Batch 作业

Java - BlockingQueue 卡住多线程应用程序