玛卡巴卡的卡巴卡玛 发表于 4 天前

Dalvik假造机、ART假造机与JVM的核心区别

一、架构设计差别


[*] ​​指令集架构​​

[*]​​JVM​​:基于​​栈结构​​,所有利用(如算术运算、方法调用)均依赖利用数栈完成,指令集紧凑但实行效率较低(需频繁内存交互)。
[*]​​Dalvik​​:基于​​寄存器架构​​,直接利用假造寄存器,指令更少且实行速率更快(如add-int/2addr一条指令即可完成加法)。
[*]​​ART​​:继承Dalvik的寄存器架构,但通过​​AOT预编译​​直接将字节码转为机器码,制止运行时表明或JIT编译。

[*] ​​字节码格式​​

[*]​​JVM​​:实行.class文件,每个类独立编译,存在冗余信息(如重复字符串常量)。
[*]​​Dalvik/ART​​:使用.dex文件,合并多个.class文件并去除冗余,体积更小(如Google+ APK代码体积减少75%),且支持跨类共享常量池。

二、实行机制对比

​​特性​​​​JVM​​​​Dalvik​​​​ART​​​​编译方式​​JIT(运行时编译)JIT(运行时编译)​​AOT(安装时预编译)​​ + JIT(热代码优化)​​启动速率​​中等(需加载类库)​​慢​​(首次需JIT编译)​​快​​(直接实行机器码)​​内存占用​​高(栈利用频繁)中等(寄存器优化)低(预编译减少暂时对象)​​存储开销​​低(.class文件)低(.dex压缩优化)​​高​​(预编译机器码增加10%-20%存储) 三、内存管理与垃圾回收(GC)


[*] ​​JVM​​

[*]​​GC算法​​:标记-扫除(Mark-Sweep)、分代收集(如G1),停顿时间较长。
[*]​​堆管理​​:每个对象头部存储GC标记,内存碎片化较严峻。

[*] ​​Dalvik​​

[*]​​GC机制​​:采用Mark-Sweep,​​频繁触发GC​​(尤其低内存装备),导致界面卡顿。
[*]​​堆分区​​:分为Zygote堆(预加载核心类)和Active堆(应用对象),通过写时复制(Copy-on-Write)优化进程创建。

[*] ​​ART​​

[*]​​GC优化​​:引入​​并发标记-扫除​​(Concurrent Mark-Sweep),减少停顿时间;支持分代GC,提拔回收效率。
[*]​​内存分配​​:采用RosAlloc、BumpPointer等算法,减少碎片化并提拔分配速率。

四、性能与实用场景


[*] ​​计算密集型任务​​

[*]​​JVM​​:通用性强,但效率低于寄存器架构(如ARM装备上浮点运算性能差)。
[*]​​Dalvik​​:JIT动态优化热代码,但运行时编译开销大(如游戏场景CPU占用率高)。
[*]​​ART​​:AOT预编译+JIT混淆模式,复杂计算流畅(如3D渲染帧率提拔30%)。

[*] ​​多进程与资源隔离​​

[*]​​JVM​​:单进程多线程,依赖利用体系线程调理。
[*]​​Dalvik/ART​​:​​每应用独立进程​​,通过Linux进程隔离保障安全性(如瓦解不影响其他应用)。

五、设计目的与生态定位


[*] ​​JVM​​:

[*]​​跨平台核心​​:实现“一次编译,随处运行”,依赖差别平台的JVM实现(如Windows JDK与Linux JDK)。
[*]​​通用性优先​​:牺牲部分性能调换广泛的硬件兼容性。

[*] ​​Dalvik/ART​​:

[*]​​移动端优化​​:针对ARM架构和低功耗装备设计,夸大能效比(如ART的AOT编译低落CPU连续负载)。
[*]​​体系集成​​:深度整合Android特性(如Zygote进程预加载、Binder IPC),提拔启动速率和响应能力。

总结



[*]​​Dalvik vs JVM​​:寄存器架构与栈架构的本质差别导致Dalvik在移动端更高效,但JVM的跨平台能力不可替换。
[*]​​ART vs Dalvik​​:AOT预编译彻底解决JIT的运行时开销,但牺牲存储空间调换性能飞跃。
[*]​​实用场景​​:

[*]JVM得当服务器和桌面应用,Dalvik/ART专为Android移动生态优化。
[*]ART的混淆编译模式(AOT+JIT)均衡了安装时间与运行效率,成为Android 5.0+的性能基石。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Dalvik假造机、ART假造机与JVM的核心区别