Java gcroots 到底是啥?为什么作用域结束后对象会被回收

2019-02-21 13:30:14 +08:00
 rizon

一个 for 循环中的强引用对象 String a=new String("") 在 for 循环结束后会被回收吧?
是 for 循环全部结束,还是当前循环结束就算了?

但是这个是基于哪个理论基础的,,查了好久资料没看到哪里提到了作用域和垃圾回收之间的关系。
java 中没有被 gcroots 引用的对象就会被回收,那到底谁是 gcroots。。为啥离开作用域就会被回收?

1686 次点击
所在节点    程序员
2 条回复
fkdog
2019-02-21 15:05:46 +08:00
回收的话应该是会在所有线程到达 safepoint 点的时候再进行回收操作的。
作用域结束以后,作用域内的对象不可被作用域外部访问而已
cyspy
2019-02-21 20:02:57 +08:00
只能保证作用域内不被回收(否则程序就崩了),但不保证离开就一定会被回收。GCRoots 包括栈、static、常量、native 方法,不被这些引用的你代码里也不可能访问到了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/537230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX