这个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的优点之一。我不知道这一点,但这是一个非常详细的说明。