这个Java代码会泄漏内存吗?

这个Java代码会泄漏内存吗?,java,memory-leaks,Java,Memory Leaks,我有两个类,两个类都引用了另一个类 class A { private B b; public A(B b) { this.b = b; } } class B { private A a; public B() { a = new A(this); } } 如果它泄漏内存,那么我如何在不泄漏的情况下实现我想要的呢?Java的GC足够聪明,可以处理循环引用,它从GC根开始,一直到对象,检查它们是否仍然存在。因

我有两个类,两个类都引用了另一个类

class A {
    private B b;

    public A(B b) {
        this.b = b;
    }
}

class B {
    private A a;

    public B() {
        a = new A(this);
    }
}

如果它泄漏内存,那么我如何在不泄漏的情况下实现我想要的呢?

Java的GC足够聪明,可以处理循环引用,它从GC根开始,一直到对象,检查它们是否仍然存在。因此,如果您有一个
A
类型的对象没有从任何地方引用(即:GC root),那么即使它引用了B,它也有资格进行垃圾收集


循环链表总是做类似的事情。

定义内存泄漏。为什么你认为这段代码会这样做,或者为什么你认为它不会呢?我认为B不能被清理,因为A持有对它的引用,但A不能被清理,因为A持有对它的引用,所以A和B永远不会被垃圾收集。一般来说,你不必担心Java中的内存泄漏。它自己进行垃圾收集,并在对象不再被引用时跟踪对象,以便安全地删除它们。这是java的优点之一。我不知道这一点,但这是一个非常详细的说明。