java中在方法创建的局部对象的实例,方法执行完,实例会不会立即被释放

publicvoidtest(){Testtest=newTest();}如果test方法执行完后,这个test实例会不会立即被释放publicTesttest(){Te... public void test(){
Test test = new Test();
}
如果test方法执行完后,这个test实例会不会立即被释放
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收
展开
 我来答
匿名用户
2012-02-18
展开全部
个人意见。对于第一种情况,不一定或者说一般情况下是不会立即回收的。GC的堆的分配感觉是集中起来进行回收的,不可能一个堆在方法执行完以后,就进行一次GC,这样JVM效率太低了。
对于第二种情况,被外部使用以后,比如 Test test = XXX.test(),然后消出对新创建的实例的引用,那么它还是会被回收的。
对GC感兴趣的话,可以参考一些书籍和网上资料。GC的东西还是不少的。
更多追问追答
追问
如果还是会被回收,那么这种方法就是不可行的了?Test test = XXX.test()
追答
你想干嘛?你想创建一个对象,然后不回收掉它吗?如果这样的话,你就写类似这样的句子,while(true){test.doSth();},只要jvm不宕掉,那么它永远也不会回收的。
醋溜_白菜
2012-02-18 · TA获得超过165个赞
知道小有建树答主
回答量:135
采纳率:50%
帮助的人:70.3万
展开全部
如果这是在c中,那么第一个会被释放,而第二个不会被释放,因为第一个是局部变量,而第二个是作为返回值,并且是new,有内存空间,返回的一定是地址,在java里应该也这样吧,汗,不确定,不过你可以试验一下。对第一个和第二个实例,分别在方法的外部调用一下,看看是不是可以用。
追问
测试了好像是没有被回收
追答
是不是因为java是一种多线程编程语言,它的main方法和垃圾回收机制是同时运行的。而java中的垃圾回收并不是即时运行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
11s107
2012-02-14 · 超过32用户采纳过TA的回答
知道答主
回答量:123
采纳率:0%
帮助的人:91.4万
展开全部
可能会,也可能不会。就看java GC怎么做了.
追问
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aa104045
2012-02-14 · TA获得超过117个赞
知道答主
回答量:246
采纳率:0%
帮助的人:237万
展开全部
如果没有指向使用 会在 } 后 gc回收
追问
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
panlei9224
2012-02-14
知道答主
回答量:19
采纳率:0%
帮助的人:5.3万
展开全部
会 垃圾回收!!!
追问
public Test test(){
Test test = new Test();
return test;
}
这个方法里的test实例被外部使用到了,会不会被回收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式