美文网首页
Android内存

Android内存

作者: coding | 来源:发表于2016-05-08 00:14 被阅读0次

    Java引用类型

    Java数据类型分为基本数据类型(如 int, byte)、引用数据类型(如 String),基本数据类型直接存储在堆内存中,引用数据类型的存储包括堆内存与栈内存,该类型的对象存储在栈内存中,对象的引用存储在堆内存中。

    Java引用数据类型包括一下4种:

    1. 强引用(StrongReference):默认的类型,也是最常见的引用类型,强引用的类型不会被GC回收;
    2. 软引用(SoftReference):当内存充足时,不会被回收,当内存不足时,会回收,正因为软引用的这个特性,其适合做一些缓存处理。
    3. 弱引用(WeakReference):无论内存是否充足,GC时一定会被回收;
    4. 虚引用(PhantomReference):无法通过虚引用访问对象,虚引用等于没有引用。

    Android 应用内存

    当使用强引用导致堆内存过大, 超过系统阀值时,因其不可回收,Android会直接OOM.
    Android设备的内存可以通过 /proc/meminfo查看。

    meminfo.png

    Android 设备分配给应用的堆内存大小,可以通过代码获取

    public void getHeapMemoryInfo() {
            ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
            int largeMemory  = am.getLargeMemoryClass();
            int memory = am.getMemoryClass();
            Logger.d("large memory:" + largeMemory);
            Logger.d("memory:" + memory);
    }
    
    heap memo.png

    通过清单文件中的 largeheap=true可以申请到更大的堆内存,但在一些严格限制的机型上,不一定有效。

    Android 内存泄漏分析

    1. MAT
    2. LeakCanary

    ~~~~~~~~困了,有空再写吧

    相关文章

      网友评论

          本文标题:Android内存

          本文链接:https://www.haomeiwen.com/subject/otrsrttx.html