美文网首页
Android 关于内存管理的一些知识

Android 关于内存管理的一些知识

作者: trayliu_小马过河 | 来源:发表于2017-12-25 17:23 被阅读16次

    通常来说,对内存的管理、优化有以下两种方式:

    • 在对象不需要的时候确保对象能够被销毁
    • 如果对象没有被销毁,则该对象一定是作为可以复用的对象。(单例)

    内存区分

    寄存器(Registers):用于存储指令,地址,数据。
    栈(Stack):存放基本类型的数据,对象的引用和函数地址等,由系统控制。
    堆(Heap):存放对象本身和数组,由开发者控制。
    静态域(Static field):存储静态变量。
    常量池(constant pool):存储常量。

    堆/栈 GC管理 存取速度
    由GC系统控制,变量生命周期结束后,由GC决定何时收回
    由虚拟机控制,变量生命周期结束后,由虚拟机释放该变量占用的内存空间

    Dumpsys Meminfo

    adb dumpsys meminfo 指令是Apps-Running的底层实现的,可以dump出当前系统的内存使用状态,如果不指定包名,则dump整个系统的内存分配状态。通常使用中,需要指定包名来获取自己App的内存分配状态。
    adb dumpsys meminfo com.xxx.xxx

    shared内存与private内存

    private内存,即完全属于每个应用独享的那部分已经分配的内存。

    shared内存,Android中的基础公共库、组件、还有一些Native 的libraries,Android系统为了节省内存资源,为他们提供了公共的内存资源。这些内存被所有运行的进程所共享。

    Android进程始于Zygote进程,Zygote进程是一切进程的来源,公共资源、组件和native的library都在Zygote中初始化。其他进程通过fork的方式产生新的进程,这样新的进程产生时就已经带有了Shared内存所预先加载的内容,从而提高了应用进程的创建速度。

    相关文章

      网友评论

          本文标题:Android 关于内存管理的一些知识

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