public class TestingImpl implements Testing {
User user = new User();
public TestingImpl(){
user.setId(33);
user.setName("cat");
} @Override
public void testFor1() {
} @Override
public void testFor2() {
recycle(user);
}
private void recycle(Object ...args) {
for (int i = 0, len = args.length; i < len; i++) {
if(args[i] instanceof User)
((User)args[i]).setName("44");
args[i] = null;
}

System.gc();
}

private class User{
private int id;
private String name;

public User(){

} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}


}}为什么user没有被回收掉?求解...

解决方案 »

  1.   

    system.gc不是你写了系统就会调用的,这个由虚拟机决定。
      

  2.   

    调用System.gc()也仅仅是一个请求。JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,使垃圾回收操作容易发生,或提早发生,或回收较多而已。
      

  3.   

    VM总是会在内存还剩10%~20%左右的时候调用自动GC,所以不会存在垃圾越堆越多.不过如果在内存资源紧缺的时候,加载大的资源还是会出现OOME.我的理解是:即时这个时候调用GC也无济于事.只能从根本上避免在内存到达峰值的时候加载大的资源. 
      

  4.   

    因为你的User user = new User();这样写的话,你的user要等到程序运行完才会被gc回收,
    你应该这么写会好点  
    User user;
    然后在程序里new,即user=new User();