改一改就可以看到在哪里回收的了,在乙处。 class TestGC { public static void main(String[] args) { A a=new A(); a.foo(); System.out.println("乙处垃圾回收:"); System.gc();//乙处垃圾回收 a.foo1(); }}class A { public A(){} public void foo() { B b=new B(); b.foo(); //本函数中再也没有使用过B System.out.println("甲处垃圾回收:"); System.gc();//甲处垃圾回收 } public void foo1(){};}class B { public B(){} public void foo() { //do something; } public void finalize() { System.out.println("finalizing..."); } }圾回收的时间是无法预见的,而且是自动进行的;如果调用System.gc()那么便会执行对象的finalize()函数(如果对象有的话)。
我知道
//--
圾回收的时间是无法预见的,而且是自动进行的
//--
所以我的例子中有System.gc();来显示的调用垃圾回收,我是想确定当垃圾回收发生在以上代码执行到甲、乙两处时是否认为b的引用存在,是否会回收b指向的空间。
class TestGC {
public static void main(String[] args) {
A a=new A();
a.foo();
System.out.println("乙处垃圾回收:");
System.gc();//乙处垃圾回收
a.foo1();
}}class A {
public A(){}
public void foo() {
B b=new B();
b.foo();
//本函数中再也没有使用过B
System.out.println("甲处垃圾回收:");
System.gc();//甲处垃圾回收
}
public void foo1(){};}class B
{
public B(){}
public void foo()
{
//do something;
}
public void finalize() {
System.out.println("finalizing...");
}
}圾回收的时间是无法预见的,而且是自动进行的;如果调用System.gc()那么便会执行对象的finalize()函数(如果对象有的话)。
System.gc();是你知道要干什么的,而“任何类只要不再被引用”是计算机内部的!
他的意思是说,当前对象引址不在指向对象了,这时系统会自动回收的!!
//--
圾回收的时间是无法预见的,而且是自动进行的;如果调用System.gc()那么便会执行对象的finalize()函数(如果对象有的话)。
//--
是不是说在乙处,b已经没有在被引用了,如果程序执行到此时进行了垃圾回收的话,则可以收回b以前指向空间就可以被回收了。
调用System.gc()不等于进行垃圾回收,是吗?