1、Android内存管理机制1.1 Java内存分配模型先上一张JVM将内存划分区域的图
程序计数器:存储当前线程执行目标方法执行到第几行 。
栈内存:Java栈中存放的是一个个栈帧 , 每个栈帧对应一个被调用的方法 。栈帧包括局部标量表 ,
操作数栈 。
本地方法栈:本地方法栈主要是为执行本地方法服务的 。而Java栈是为执行Java方法服务的 。
方法区:该区域被线程共享 。主要存储每个类的信息(类名 , 方法信息 , 字段信息等)、静态变量 , 常量 , 以及编译器编译后的代码等 。
堆:Java中的堆是被线程共享的 , 且JVM中只有一个堆内存 , 主要存储对象本身及数组
1.2 Dalvik和ART介绍Dalvik:Dalvik是Google公司自己设计用于Android平台的Java虚拟机 。它可以支持已转换为.dex格式的Java应用程序的运行 , .dex格式是专门为Dalvik应用设计的一种压缩格式 , 适合内存和处理器速度有限的系统 , Dalvik经过优化 , 允许在有限的内存中同时运行多个虚拟机实例 , 并且每一个Dalvik应用做为独立的Linux进程执行 , 独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭 。
ART:ART表示Android Runtime , Dalvik是依靠一个just-In -Time编译器去解释字节码 , 运行时编译后的应用都需要通过一个解释器在用户的设备上运行 , 这一机制并不是特别高效 , 但是能让应用更容易在不同的硬件和架构上运行 。ART则是完全改变了这种做法 , 在安装应用的时候就预编译字节码到机器语言 , 这一机制叫预编译 。在移除解释代码这一过程 , 应用程序执行将更有效率 , 启动速度更快 。
ART优点:
1.系统性能更高
2.应用启动速度 , 运行更快 , 体验更好 , 触感反馈更加及时 。
3.更长的电池续航能力
4.支持更低的硬件
ART缺点:
1.储存空间占用更大 。
2.应用安装时间更长 。
Dalvik与ART区别
1.Dalvik每次都要编译在运行 , art只会安装时启动编译
2.art占用的空间比Dalvik要大 , 就是用空间换时间
3.art减少编译 , 减少CPU使用频率 , 使用明显改善电池续航
4.art启动 , 运行更快 , 体验更好 , 触感反馈更及时 。
1.3 为什么要进行内存优化1.减少oom,提高应用的稳定性
2.减少卡顿 , 体验更好
3.减少内存占用 , 应用存活率更高
4.提前处理掉一些异常的隐患
2、Java内存回收算法2.1判断Java中对象是否存活的算法2.1.1 引用计数算法堆内存的每个对象都有一个引用计数器 , 当对象被引用的时候 , 计数器 1 , 当引用失效时计数器-1 , 当计数器的值为0时 , 说明该对象没有被引用 , 就会被认为是垃圾对象 , 系统将会将其回收内存重新分配 。
优点:引用计数器执行简单 , 判定效率高 。
缺点:对于循环引用的对象难以判断出来 , 同时引用计数器增加了程序执行的开销 , 在jdk1.1后 , 就不在使用了 。
2.1.1 根搜索法GC Roots的对象做为起点 , 然后向下搜索 , 搜索所走过的路径称为引用链 , 当一个对象到GC Roots没有任何引用链相连时 , 则该对象不可达 , 也就是说该对象为为垃圾对象 , 可以被回收 。
在Java中 , 可以做为GC Roots的对象包括一下四种:
1.虚拟机栈中引用的对象
2.方法区中的类静态属性引用的对象
3.方法区中常量引用的对象
4.本地方法栈中JNI的引用对象
2.2 JVM垃圾回收算法2.2.1 标记清除法最基础的垃圾收集算法 , 算法分为标记和清除两个阶段:首先标记出所有需要回收的对象 , 在标记完成之后统一回收掉所有被标记的对象 。
推荐阅读
- Win11怎么进行优化 Win11服务优化设置
- Photoshop运行卡顿太烦人,你忘记优化了
- 火影ol叛忍得什么,叛忍难度紧急优化
- 我来分享win10系统提升系统性能的详细操作。
- 鬼话钟馗gm工具怎么用,钟馗技能特效全面优化
- 战神36计 战力怎么算,战力优化好选择
- 火影ol 日之印之力怎么完成,《火影忍者OL》竞技场规则优化
- 高速优化 游戏专用Win10 64&32位系统 V2022
- 花千骨门派战怎么玩,门派战优化内容
- 如何设置英伟达显卡玩游戏性能更高?英伟达显卡游戏优化设置