Android内存专题

Android内存优化1-内存原理

2018-07-28  本文已影响0人  棒槌爸爸

要优化内存,先要弄懂android内存体系。

image.png

计算器:这是线程私有的, 标记线程执行到哪儿了。不会抛出异常

虚拟机栈:线程私有,栈帧用来存放局部变量表 操作数栈 方法出口等。

局部变量表存放了编译器已知的基本数据类型, 对象引用

本地方法栈:主要是native方法执行需要用到的栈

方法区:类信息、常量、静态变量,运行时常量池

运行时常量池记录了编译器的各种字面量和符号引用。

堆: Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建,是虚拟机所管理的内存中最大的一块。此内存区域的唯一目的就是【存放对象实例和数组】,几乎所有的对象实例和数组都在这里分配内存。

栈内存的回收:
栈也会内存溢出的,例如你写个递归。java栈内存的内存回收就是利用方法和栈的特性来做的。

基础类型变量仅方法内的局部变量保存在栈内存中,成员变量保存在堆中。

堆内存的回收:
Java的垃圾回收机制GC,GC仅运行在堆内存上,开始学习GC之前你应该知道一个词:stop-the-world。

GC有多种回收算法,但不管哪种回收算法,在GC回收时除了gc所需要的线程外,其他线程都会挂起直到GC结束,GC调优通常就是为了改善stop-the-wrold的时间。

Android Dalvik Heap与原生Java一样,将堆的内存空间分为三个区域,
Young Generation,Old Generation, Permanent Generation。

AQOUYULE~BL0BO0%6OLJA74.png

很多手机厂商号称的无卡顿安卓,无非就是利用一些比较成熟的基于统计,机器学习的算法定时清理数据,清理内存,甚至提前加载数据到内存。

上一篇 下一篇

猜你喜欢

热点阅读