android 预优化oat_Android虚拟机之 ART

我们都知道,Android 是用 Java 开发的,那么为什么 Android 不直接用 Java 的 JVM 虚拟机呢?

bc7a2b06de48b4783bf016bed0cc2945.png 这是因为 JVM 把 Java 编译成的 class 字节码里面具有很多冗余信息,而且每次读取字节码之前都要进行 class 文件的读取,这样就会多次读写,而使用 Android 虚拟机则会把所有 class 文件打包成一个 dex 文件,这个 dex 文件就是压缩后去除冗余信息之后的字节码,Android 读取字节码只要读取整个 dex 文件即可,这样加速了运行速度。而且 JVM 是基于栈的虚拟机,而 Android 是基于寄存器的虚拟机

上面提到栈和寄存器虚拟机,那么它俩有什么区别呢?

bc7a2b06de48b4783bf016bed0cc2945.png  基于栈虚拟机读取指令是在内存上工作的,而寄存器读取指令则是在高速缓存区(寄存器)上工作,CPU 直接操作,执行更快。栈虚拟机更不依赖于硬件,而寄存器虚拟机会根据硬件来进行优化,所以不适合多平台移植。并且如果做同一个操作,栈的指令比寄存器的指令更多。总的来说就是以空间换时间

知道 Android 为什么要使用自己的虚拟机后,那么为什么 Android 会在 4.4 版本之后抛弃 Dalvik 虚拟机,而反而使用 ART 虚拟机了呢,它两又有什么区别呢?

bc7a2b06de48b4783bf016bed0cc2945.pngDalvik 虚拟机的原理就是每次运行 app 的时候都需要通过 JIT 编译器将 dex 编译为 odex 文件,这样就会导致每次运行应用都很慢, 所以在 4.4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值