Android Dalvik 虚拟机介绍

bd464143f4a3145d8c53b039309a2e40.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

1.Java 语言在Android 上运行流程
2.虚拟机发展过程
3.Android Dalvik 模式
4.Android N 中dex2oat 原理以及模式
5.如何判断dex2oat 采用的相关参数
6.如何查看dex2oat 的log
7.什么时候进行dex2oat
8.手机反应慢的原因
9.解决手机反应慢的方法
10.参考文献

1.Java 语言在Android 上运行流程

7f82d6ae38d802efa8308b76375ae590.jpeg

Java语言在android 运行流程

2.虚拟机发展过程

  • 1.初期Dalvik

  • 2.中期Dalvik

  • 3.后期ART模式

    为了让APK在不同的虚拟机都可以运行,Google 采取了适配器模式,在让虚拟机运行之前先执行 dexopt ,即将dex 文件优化成odex 文件,可以让虚拟机更加优化的执行。

    在ART 虚拟机中,dexopt 将dex文件优化成二进制格式的问题,从而可以让ART虚拟机执行。
    dexopt 会调用dex2oat 进行优化,dex2oat 的任务是将原来的dex文件进行预翻译,从而可以加快app运行的时间,但是由于某些app比较复杂,所以优化的时间就比较长。
    优化是以dex 文件中的Method 方法为单位,dex2oat 在优化时候,会根据需求优化一定量的Method,即不是所有的Method 都回翻译成oat模式。

3.Android Dalvik 模式

根据优化Method量的多少分的模式

62c0a6a31f15b84994e85bcbf0151825.jpeg

Android Dalvik

4. Android N 中dex2oat 原理以及模式

N版本当中强化了JIT模式。JIT模式是Just in time 的简称。意思是在运行的时候,根据method有使用频率来决定是否要对某一个方法进行优化。虚拟机会统计每一个方法被执行的次数。如果某一个方法执行的次数比较多,达到一定的阈值,就会将升级为hot method,并将其记录在一个profile当中。在系统空闲并且在充电的时候,只将这些方法进行优化。在运行的时候,也会对这些方法进行优化,以方便在运行的时候使用。

  • 1.Android N dex2oat 模式图

ae37535b1613d6d83281d871f7b91740.jpeg

Android N dex2oat 模式图

  • 2.Android N dex2 oat 原理图

16cfdcac91cbd24b463de7b68c306d01.jpeg

Android N dex2oat 原理图

5. 如何判断dex2oat 采用的相关参数

dex2oat 的参数会在代码中通过如下函数打印

  • 1.L 版本

L版本会无条件打印

timings.StartTiming("dex2oat Setup");
1436  LOG(INFO) << CommandLine();
  • 2 . M 和N版本

在M和N当中会有条件的打印不同的内容。
例如在会在debug版本中打印非常详细的dex2oat参数,而在非debug版本中打印部分内容。

if (kIsDebugBuild || dex2oat.IsImage() || dex2oat.IsHost() || !kIsTargetBuild) {
2144    LOG(INFO) << CommandLine();
2145  } else {
2146    LOG(INFO) << StrippedCommandLine();
2147  }

6.如何查看dex2oat 的log

搜索关键字

  • dex2oat

  • dex-file
    被优化的dex 文件信息

  • oat-fd

  • oat-location
    oat 存放位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值