Android内存分析以及解决方法

背景:工具是 AndroidStudio 版本号2.0+
知识提要
  • 什么是内存泄漏
    内存泄漏指的是进程中某些对象(垃圾对象)已经没有使用价值了,但是它们却可以直接或间接地引用到gc roots导致无法被GC回收。无用的对象占据着内存空间,使得实际可使用内存变小,形象地说法就是内存泄漏了。

  • 什么是内存溢出(OOM)

    当一个app内存泄漏严重的时候,因为释放不掉内存,只能一直申请内存导致程序占用内存一直变大,当占用的内存超过系统分配的额度的时候就会内存溢出了。
    当然造成内存溢出的还有很多原因,内存泄漏只是其中的一部分。

    ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);  
    int heapSize = manager.getMemoryClass();  
    
    //我们可以通过这个代码获取这个手机的(heap size)堆内存,以后我们就
    //可以根据这个大小来合理分配我们的资源,防止出现 out of memory error。
  • 什么是GC

    GC其实就是我们常说的垃圾回收,Android会在一定的阶段手动或自动的进行垃圾回收。有以下四种GC的原因:

    • GC_CONCURRENT: 当我们应用程序的堆内存快要满的时候,系统会自动触发GC操作来释放内存。
    • GC_FOR_MALLOC: 当我们的应用程序需要分配更多内存,可是现有内存已经不足的时候,系统会进行GC操作来释放内存。
    • GC_HPROF_DUMP_HEAP: 当生成HPROF文件的时候,系统会进行GC操作,关于HPROF文件我们下面会讲到。
    • GC_EXPLICIT: 这种情况就是我们刚才提到过的,主动通知系统去进行GC操作,比如调用System.gc()方法来通知系统。或者在DDMS中,通过工具按钮也是可以显式地告诉系统进行GC操作的,还有我们用AndroidStudio
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值