探索 Android 内存优化方法( 二 )

  • 有限内存运行多进程 在 Androd 中 , 每一个应用都运行在一个 Dalvik VM 实例中 , 每一个 Dalvik VM 都运行在一个独立的进程空间 , 这种机制使得 Dalvik 运行在有限的内存中同时运行多个进程 。
  • 共享机制 Dalvik 拥有预加载—共享机制 , 不同应用之间在运行时可以共享相同的类 , 拥有更高的效率 。而 JVM 不存在这种共享机制 , 不同的程序 , 打包后的程序都是彼此独立的 , 即使包中使用了同样的类 , 运行时也是单独加载和运行的 , 无法进行共享 。
  • 不是 JVM Dalvik 不是 Java 虚拟机 , 它并不是按照 Java 虚拟机规范实现的 , 两者之间并不兼容 。
  • 2.2 Dalvik 堆大小
    每一个手机厂商都可以设定设备中每一个进程能够使用的堆大小 , 设置进程堆大小的值有下面三个 。
    1. dalvik.vm.heapstartsize 堆分配的初始值大小 , 这个值越小 , 系统内存消耗越慢 , 但是当应用扩展这个堆 , 导致 GC 和堆调整时 , 应用会变慢 。这个值越大 , 应用越流畅 , 但是可运行的应用也会相对减少 。
    2. dalvik.vm.heapgrowthlimit 如果在清单文件中声明 largeHeap 为 true , 则 App 使用的内存到 heapsize 才会 OOM , 否则达到 heapgrowthlimit 就会 OOM 。
    3. dalvik.vm.heapsize 进程可用的堆内存最大值 , 一旦应用申请的内存超过这个值 , 就会 OOM 。
    假如我们想看其中的一个值 , 我们可以通过命令查看 , 比如下面这条命令 。
    adb shell getprop dalvik.vm.heapsize
    3. 什么是 ART?
    ART 的全称是 Android Runtime , 是从 Android 4.4 开始新增的应用运行时环境 , 用于替代 Dalvik 虚拟机 。
    Dalvik VM 和 ART 都可以支持已转换为 .dex(Dalvik Executable)格式的 Java 应用程序的运行 。
    ART 与 Dalvik 的区别有下面几个 。
    • 预编译 Dalvik 中的应用每次运行时 , 字节码都需要通过即时编译器 JIT 转换为机器码 , 这会使得应用的运行效率降低 。在 ART 中 , 系统在安装应用时会进行一次预编译 , 将字节码预先编译成机器码并存储在本地 , 这样应用就不用在每次运行时执行编译了 , 运行效率也大大提高 。
    • GC 在 Dalvik 采用的垃圾回收算法是标记-清除算法 , 启动垃圾回收机制会造成两次暂停(一次在遍历阶段 , 另一次在标记阶段) 。而在 ART 下 , GC 速度比 Dalvik 要快 , 这是因为应用本身做了垃圾回收的一些工作 , 启动 GC 后 , 不再是两次暂停 , 而是一次暂停 。而且 ART 使用了一种新技术(packard pre-cleaning) , 在暂停前做了许多事情 , 减轻了暂停时的工作量 。
    • 64 位 Dalvik 是为 32 位 CPU 设计的 , 而 ART 支持 64 位并兼容 32 位 CPU , 这也是 Dalvik 被淘汰的主要原因 。
    4. 什么是低杀?4.1 低杀简介
    在 Android 中有一个心狠手辣的杀手 , 要想让我们的应用活下来 , 就要在开发应用时格外小心 。
    不过我们也不用太担心 , 因为它只杀“坏蛋” , 只要我们不使坏 , 那它就不会对我们下手 。
    这个杀手叫低杀 , 它的全名是 Low Memory Killer 。
    低杀跟垃圾回收器 GC 很像 , GC 的作用是保证应用有足够的内存可以使用 , 而低杀的作用是保证系统有足够的内存可以使用 。
    GC 会按照引用的强度来回收对象 , 而低杀会按照进程的优先级来回收资源 , 下面我们就来看看 Android 中的几种进程优先级 。
    4.2 进程优先级
    在 Android 中不同的进程有着不同的优先级 , 当两个进程的优先级相同时 , 低杀会优先考虑干掉消耗内存更多的进程 。
    也就是如果我们应用占用的内存比其他应用少 , 并且处于后台时 , 我们的应用能在后台活下来 , 这也是内存优化为我们应用带来竞争力的一个直接体现 。
    当用户通过多次点击达到一个页面 , 然后又打开了其他应用时 , 这时我们的应用处于后台 , 如果我们的应用在后台能活下来 , 意味着当用户再次启动我们的应用时 , 不需要再次进行这个繁琐的操作 。


    推荐阅读