Android
之前使用的是 Dalvik 虚拟机 ,
之后使用的是 ART 虚拟机 ;
Dalvik 虚拟机 也是 Java 虚拟机的一种 , 但是其没有获得 Sun 的测试审核 , 经过 Sun 公司测试 , 审核 , 授权后 , 虚拟机才能叫做 Java 虚拟机 , 只是名字上有区别 , 但是其还是符合 JVM 规范的 ;
同理 , 手机厂商必须经过 Google 测试审核之后 , 才能叫 Android 手机 ;
Dalvik 虚拟机 的 内存结构 , 与 JVM 有一定的区别 ;
不同架构上的 Java 虚拟机 实现也是不同的 ;
CPU 架构参考 【C 语言】CPU 架构 ( CPU 指令集类型 | CPU 指令类型 | CPU 架构 )
复杂指令集示例 : 复杂指令集中 , 所有的动作都是定义好的 ,
个指令 , 就可以完成 ;
精简指令集示例 : 精简指令集中 , 只有最基础的指令 , 复杂指令需要自己合成 ;
个指令 , 才能完成 ;
CPU 位数 :
位 , 表示单次读取指令的吞吐量 ,
位表示一次可以读取
位 (
Byte ) 的指令 ;
DVM 堆分为
部分 , Active Heap 和 Zygote Heap ;
Android 系统刚启动的时候 , 没有启动应用 , 只有 Zygote 进程 , 所有的应用都是 Zygote 进程 fork()
启动的 ;
Zygote Heap 就是 Zygote 进程的堆 ;
当有第一个 Android 应用进程启动后 , 就会出现 Active Heap 堆 ;
DVM 内存划分 :
DVM 借助一些 辅助数据结构 管理堆内存 ;
上一次存活 , 本次没有存活的对象 , 是本次需要被回收的对象 ; 这些对象由 Mark Stack 找出 ;
Mark Stack 检索所有的引用对象 , 检查哪些对象需要被回收 ;