1 回答
TA贡献1818条经验 获得超3个赞
userSession是对对象的引用。您“分配”null给这个引用,而不是一个对象。所以你正在改变这个参考。它不会更改userSession以前引用/指向的对象。
让我试着补充一下:如果这个对象的方法与程序的其余部分在同一个线程中运行,则在此方法完成后引用将被更改,因此问题甚至不会出现。
相反,如果这个对象在不同的线程中起作用,那么......我刚刚测试了它:
public class UnreferencedTest {
public static void main(String[] args) {
UnreferencedTest u = new UnreferencedTest();
u.createObject();
}
private void createObject() {
Unreferenced obj = new Unreferenced();
Thread t = new Thread(obj);//create new thread
t.start();
obj = null; //remove only reference to object
System.gc(); //ask GC to clean up
try {
Thread.sleep(10000); //wait a bit longer than other thread
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private class Unreferenced implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
areYouStillHere();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void areYouStillHere() {
System.out.println("I'm still here!");
}
}
}
...甚至“要求” GC 清理未引用的对象。(不保证会!)它只等待 5 秒,但仍在运行。
希望有帮助!
添加回答
举报
