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

2017-12-25  本文已影响16人  trayliu_小马过河

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

内存区分

寄存器(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内存所预先加载的内容,从而提高了应用进程的创建速度。

上一篇下一篇

猜你喜欢

热点阅读