android static 什么时候被回收
答案:2 悬赏:20 手机版
解决时间 2021-04-04 21:30
- 提问者网友:雾里闻花香
- 2021-04-03 23:42
android static 什么时候被回收
最佳答案
- 五星知识达人网友:天凉才是好个秋
- 2021-04-04 01:13
如果你没有设置 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堆 和 方法区
那么你可以认为在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堆 和 方法区
全部回答
- 1楼网友:罪歌
- 2021-04-04 02:17
在整个应用结束的时候,就是application销毁后,但是一般退出应用后application不会立即销毁,所以建议手动销毁一些必要的static 变量,还有android开发中尽量少使用static变量,容易内存溢出,和出现一些异常。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯