android GC机制

AndroidGC机制

 

GCGarbage Collector

 

GC算法的核心思想

Android虚拟机采用根搜索算法和程序计数器算法。GC会从根节点(GC Roots)开始对heap(堆)进行遍历。到最后,部分没有直接或者间接引用到GC Roots的就是需要回收的垃圾,会被GC回收掉对堆内存中的对象进行识别,如果对象正在被引用则称其为存活对象, 如果对象不再被 引用,则称为垃圾对象,可以收回其占据的空间,用于再分配。

 

GC优先级

没有引用的对象-------->虚引用--------->弱引用-------->软引用-------->强引用(默认)

 

 

GC触发的条件

JVM进行GC的频率很高,但因为这种GC占用时间极短,所以对系统影响不大。

GC 对系统影响明显,触发 主GC 的条件

1.应用程序空闲时,GC会被调用

主动被调用。GC在优先级最低的线程中进行

2.堆内存不足时,GC会被调用

被动被调用。JVM强制调用GC线程,若调用一次仍不能满足内存分配要求,JVM 会在调用两次GC进行尝试,如果还是不能满足需求则JVM报出“Out of Memory

由于是否进行主 GCJVM根据系统环境决定,所以主GC运行具有不确定性

 

GC存在的目的

有效防范动态内存分配中因为内存垃圾过多而引发的内存泄漏和不恰当的内存释 造成的内存非法引用

 

 

减少 GC 开销措施

1.不要显示的调用System.gc()

虽然此函数建议JVM进行主GC,但经常会触发主GC的执行,增加了间歇性停 顿的次数

2.减少临时对象的使用

临时对象在跳出函数调用后会成为垃圾,少用临时对象就相当于减少垃圾的产生从而延长了堆内存不足事件发生的时间,减少主GC的机会

3.对象不用时显示的置为NULL

NULL的对象都会被作为垃圾处理,有利垃圾回收器判定垃圾,提高GC

4.尽量使用StringBuffer而不是String进行累加字符串

5.能用int,long基本数据类型而不使用IntegerLong对对象

6.少使用静态对象变量

静态变量属于全局变量,不会被垃圾回收器回收

7.分散对象创建和删除时间

短时间创建大量对象会需要大量内存空间,JVM只能调用主GC回收内存,整合内存碎片。短时间内删除大量对象产生大量垃圾对象,增加了下次创建新对象时强制主GC的机会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值