Android内存优化相关

记录一下出现的问题:

Android内存泄漏主要原因:

1.单例模式生命周期导致内存泄漏

2.静态变量--->存在jvm方法区,生命周期从类加载开始

3.非静态内部类--->默认持有外部类的引用

建议使用 静态内部类+弱引用的方式

因为gc遇到弱引用的activity会释放

4.使用thread或asynctask(默认隐式持有外部activity引用)

5.集合中的对象未清理

6.资源未关闭,比如动画未cancel()

7.WebView加载网页会长期占用内存

 

Android gc内存回收

GC会选择一些它了解还存活的对象作为内存遍历的根节点(GC Roots),比方说thread stack中的变量,JNI中的全局变量,zygote中的对象(class loader加载)等,然后开始对heap进行遍历。到最后,部分没有直接或者间接引用到GC Roots的就是需要回收的垃圾,会被GC回收掉。如下图蓝色部分。

Java内存泄漏指的是进程中某些对象(垃圾对象)已经没有使用价值了,但是它们却可以直接或间接地引用到gc roots导致无法被GC回收。无用的对象占据着内存空间,使得实际可使用内存变小,形象地说法就是内存泄漏了。下面分析一些可能导致内存泄漏的情景。

java四种引用

1.强引用:Object obj=new Object();  若强引用还在,GC永不会回收

2.软引用:在内存溢出之前进行二次回收

3.弱引用:引用对象只生存到下一次垃圾回收之前

4.虚引用:在对象被收集器回收之前时收到系统通知。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值