Android进阶解密读书笔记(十一)——Dalvik和ART

本文详细介绍了Android中的Dalvik虚拟机,包括其与JVM的区别,运行时堆及GC日志。此外,还深入解析了ART虚拟机,阐述了它与Dalvik的不同,如AOT编译、GC机制的改进以及运行时堆的结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dalvik虚拟机(DalvikVirtual Machine)

DVM 是 Google 专门为 Android 平台开发的虚拟机,它运行在 Android 运行时库中

DVM与JVM的区别

DVM不是一个JVM,主要原因时 DVM 并没有遵循 JVM 规范来实现的。DVM 与 JVM 主要有以下区别:

  1. 基于的架构不同
    JVM基于栈,意味着需要去栈中读写数据,所需的指令会更多,这样会导致速度变慢,对于性能有限的移动设备,显然不是很适合的

    DVM基于寄存器,没有基于栈的虚拟机在复制数据时而使用大量的出入栈的指令,同时指令更紧凑、更简洁;但由于显式指定了操作数,所以基于寄存器的指令会比基于栈的指令更大
  2. 执行的字节码不同
    Java SE中,Java类被编译成了一个或多个 .class 文件,并被打包成 jar 文件,而后 JVM 会通过相应的 .class 文件和 jar 文件获取相应的字节码,执行顺序为: .java 文件 -> .class 文件 -> .jar文件

    DVM 会用 dx 工具将所有的 .class 文件转换为一个 .dex 文件,然后 DVM 会从该 .dex 文件读取指令和数据
  3. DVM 允许在有限的内存中同时运行多个进程
    在 Android 中的每一个应用都运行在一个 DVM 实例中,每一个 DVM 实例都运行在一个独立的进程空间中,独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭
  4. DVM 由 Zygote 创建和初始化
    Zygote 是一个 DVM进程,同时也用来创建和初始化 DVM 实例
  5. DVM 有共享机制
    不同应用之间在运行时可以共享相同的类,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值