public void test(){
Test test = new Test();
}
如果test方法执行完后,这个test实例会不会立即被释放
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收
如果还是会被回收,那么这种方法就是不可行的了?Test test = XXX.test()
追答你想干嘛?你想创建一个对象,然后不回收掉它吗?如果这样的话,你就写类似这样的句子,while(true){test.doSth();},只要jvm不宕掉,那么它永远也不会回收的。
追问我只是想知道,这种在局部方法中创建的实例,会不会随着方法执行的结束立刻就被回收,尽管它在外部被调用了
追答不会
追问谢谢,就选你为最佳答案了,再问下,不会被回收,是不是因为他在外部被调用了
追答嗯,你可以这么理解。你记住一点,对象会不会回收的一个重要依据是否被引用。你要是“立刻就被回收了”,那么外部要用到的你创建的对象怎么办?
给我分吧,嘿嘿。第一次这么长的回答一个人的问题。。。
再次推荐你看《深入JVM虚拟机》,要是暂时看不懂得话,先别纠结这些问题了,学好java的其他知识吧。
测试了好像是没有被回收
追答是不是因为java是一种多线程编程语言,它的main方法和垃圾回收机制是同时运行的。而java中的垃圾回收并不是即时运行的。
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收