android static 什么时候被回收
答案:2 悬赏:50
解决时间 2021-02-27 00:27
- 提问者网友:恋你成殇
- 2021-02-26 12:02
android static 什么时候被回收
最佳答案
- 二级知识专家网友:一池湖水
- 2021-02-26 13:03
在整个应用结束的时候,就是Application销毁后,但是一般退出应用后Application不会立即销毁,所以建议手动销毁一些必要的static 变量,还有android开发中尽量少使用static变量,容易内存溢出,和出现一些异常。
全部回答
- 1楼网友:末路丶一枝花
- 2021-02-26 14:29
如果你没有设置 xxx = null
那么你可以认为在application终止前,该内存永远不会回收.
如果你设置了null.那么在gc时会释放.
为什么不会回收?
静态对象的引用在方法区里. 方法区不参与gc.
java heap分为3个区
1.young 年轻代
2.old 老年代
3.permanent 持久代,也有的jvm实现里叫 method area 方法区,具体取决于jvm实现.
所有类信息,类的静态变量都在 持久代 中
当你new 一个对象,申请内存的时候,首先是在年轻代中申请内存.如果失败了,会触发一次 minor gc.
minor gc只会释放 年轻代 中的内存,并把仍存活的且符合条件的 对象 从年轻代 移入老年代.
如果minor gc后 内存仍然不足,此时会触发一次 full gc.
full gc会释放老年代 和 持久代 中未被使用的对象(?)
如果是java程序,那么 静态常量 有 可能在 full gc时和 class本身一起被回收.
(?)这个依赖具体虚拟机实现 有的虚拟机实现里 持久代/方法区 不参与gc
dalvik虚拟机中
只有 gc堆 和 方法区
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯