Android内存

Java引用类型

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

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

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

Android 应用内存

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

Android内存_第1张图片
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);
}
Android内存_第2张图片
heap memo.png

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

Android 内存泄漏分析

  1. MAT
  2. LeakCanary

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

你可能感兴趣的:(Android内存)