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操作的,还有我们用AndroidStu

你可能感兴趣的:(Android系列,android,内存,内存泄漏,oom)