首页 新闻 会员 周边

非静态变量到底会不会自动回收?

0
悬赏园豆:10 [已解决问题] 解决于 2017-04-09 18:38

最近看了篇博客,说静态和非静态都被Loader Heap加载,然后写入Method Table中,就不受GC控制了,也就是都得等应用程序结束后才被释放。那么这么说非静态变量就不会自动回收了?

到底是怎么个情况?之前学的不对?

shuai7boy的主页 shuai7boy | 菜鸟二级 | 园豆:225
提问于:2017-04-08 21:35
< >
分享
最佳答案
0

你所谓的写入method table是指对象的方法的指针吧?这个是编译时的行为,这个时候都没有gc(运行时),所以谈不上控制不控制。

而针对gc而言,任何没有根引用到的对象都可能在接下来的gc某个周期被回收掉,比如你一个方法中的变量,在方法执行结束后就可能在下次gc中被回收掉。而针对静态字段,引用它的对象为包含这个字段的type,而type信息基本不可能在单一应用程序域内被回收。

收获园豆:10
Daniel Cai | 专家六级 |园豆:10424 | 2017-04-09 10:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册