Android 虚拟机

news2024/9/30 3:20:26

文章目录

  • Android 虚拟机
    • Java虚拟机
      • 基于栈的虚拟机
      • 栈的执行流程
    • Dalvik虚拟机
      • 基于寄存器的虚拟机
      • 寄存器的执行流程
      • Java虚拟机与Dalvik虚拟机区别
    • ART虚拟机
      • Android 7.0的运行方式

Android 虚拟机

Java虚拟机

基于栈的虚拟机

每一个运行时的线程,都有一个独立的栈。

栈中记录了方法调用的历史,每一次方法调用,栈中都会产生一个栈帧。最顶部的栈帧称为当前栈帧,代表当前执行的方法。

基于栈道虚拟机通过操作数栈进行所有操作。

在这里插入图片描述

栈的执行流程

Java代码:

public void foo() {
    int a = 1;
    int b = 2;
    int c = (a + b)*9;
}

编译为字节码:

在这里插入图片描述

执行过程:

第一步:执行第0行指令,将1压入操作数栈。

第二步:执行第1行指令,将栈顶的值1存入局部变量表。

第三步:执行第2行指令,将2压入操作数栈。

第四步:执行第3行指令,将2存入局部变量表。

第五步:执行第4行指令、第5行指令,将1和2压入操作数栈。

第六步:执行第6行指令,进行相加并压入操作数栈。

第七步:将int类型值9压入操作数栈。

第八步:执行第9行指令,进行相乘并压入操作数栈。

第九步:将栈顶值存入局部变量表。

Dalvik虚拟机

Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应一个单独的Dalvik虚拟机实例。

Dalvik虚拟机本质也是一个Java虚拟机,只不过它执行的不是class文件而是dex文件。

在这里插入图片描述

基于寄存器的虚拟机

基于寄存器的虚拟机没有操作数栈,但是有很多虚拟寄存器。

与JVM相似,在Dalvik虚拟机中每个线程都有自己的寄存器和调用栈,方法调用的活动记录以帧为单位保存在调用栈上。

寄存器的执行流程

dex字节码:

在这里插入图片描述

执行过程:

第一步:执行第0行指令,将1放入寄存器v0。

第二步:执行第1行指令,将2放入寄存器v1。

第三步:执行第2行指令,相加后将结果放入寄存器v0。

第四步:执行第3行指令,将v0和9相乘,并将结果放入v0。

Java虚拟机与Dalvik虚拟机区别

Java虚拟机Dalvik虚拟机
指令集Java字节码
(基于栈)
Dalvik字节码
(基于寄存器)
文件格式.class 文件.dex 文件
单条指令长度很长
同样逻辑指令条数
同样逻辑数据移动次数
同样逻辑临时结果存储次数

所以为什么Android平台基于寄存器的设计?

  1. 指令条数少,所以执行的效率更快!
  2. 数据移动次数少、临时结果存放次数少,所以更省内存和执行效率更快!
  3. 映射真实机器的寄存器,所以执行效率更快!

ART虚拟机

Dalvik虚拟机执行的是dex字节码,解释执行。从Android 2.2版本开始,支持JIT即时编译(Just In Time)在程序运行的过程中进行选择热点代码(经常执行的代码)进行编译或者优化。

而ART(Android Runtime) 是在 Android 4.4 中引入的一个开发者选项,也是 Android 5.0 及更高版本的默认 Android 运行时。ART虚拟机执行的是本地机器码。Android的运行时从Dalvik虚拟机替换成ART虚拟机,并不要求开发者将自己的应用直接编译成目标机器码,APK仍然是一个包含dex字节码的文件。

Dalvik下应用在安装的过程,会执行一次优化,将dex字节码进行优化生成odex文件。而Art下将应用的dex字节码翻译成本地机器码的最恰当AOT时机也就发生在应用安装的时候。

在Android 7.0中ART 引入了预先编译机制(Ahead Of Time),在安装时,ART 使用设备自带的 dex2oat 工具来编译应用,dex中的字节码将被编译成本地机器码。

Android 7.0的运行方式

ART 使用预先 (AOT) 编译,并且从 Android N混合使用AOT编译,解释和JIT。

1、最初安装应用时不进行任何 AOT 编译(安装又快了),运行过程中解释执行,对经常执行的方法进行JIT,经过 JIT 编译的方法将会记录到Profile配置文件中。

2、当设备闲置和充电时,编译守护进程会运行,根据Profile文件对常用代码进行 AOT 编译。待下次运行时直接使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

包装类型和基本类型的转换(自动装箱/自动拆箱)

①包装类型->基本类型 ②基本类型->包装类型 //第一种:直接创建对象Integer ynew Integer(20);//第二种:使用Integer类的静态方法valueOf()Integer zInteger.valueOf(30); JAVA对以上内容的简化: 自动装箱(基本类型->包…

嵌入式C语言知识复习和提高

文章目录 前言基础知识main函数防BUG注释(重要)关键字标识符命名(驼峰命名)常量类型变量printf1.输出不同类型数据2.输出不同宽度数据3.不同类型数据长度归类 scanf函数运算符sizeof(运算符,优先级2&#x…

Springboot ruoyi配置mysql备份定时任务

一、RuoYiConfig.class 新增获取备份路径方法 public static String getDataBaseBackUp() {return getProfile() "/dbBackUp";} 二、RyTask:新增备份数据库方法 mySqlDump方法:参数详见代码 package com.ruoyi.quartz.task;import cn.hut…

智慧工地4G+蓝牙+GPS/北斗RTK人员定位系统解决方案

工地是事故多发地,对工地人员进行定位管理非常有必要。传统工地管理手段存在局限性,往往难以高效地管理工地上的人员。随着科技的发展,工地人员定位管理系统逐渐普及。通过使用人员定位系统,工地管理者可以对工地上的人员进行全面…

对权限的理解和使用

目录 一:用户权限: ★su命令 ★sudo命令 二:文件权限 ★文件的类型权限 ★文件夹的权限的使用 ▲文件夹的可读权限: ▲文件夹的可写权限: ▲文件夹的可执行权限: ★权限的修改操作 ▲chmod命令 ★对于文件的…

C++:deque的概念以及stack和queue的模拟实现

文章目录 stack的模拟实现dequequeue的模拟实现 本篇主要总结的是stack和queue的模拟实现以及deque的原理 stack的模拟实现 和前面的模拟实现相同,首先要看官方实现的功能 这里引入了Container的概念,从字面意思来看,也就是说,在…

pdf转换成word,这里有几个不错的方法

pdf转换成word怎么转?大家都知道,在电脑进行各种文件格式转换中,PDF转换为Word文档的需求量应该是最大的。在我们的日常工作中,经常需要将PDF转换为Word格式。为什么要将pdf文件转换成word,相信大家也都应该知道的&…

图解 | 这就是网络

你是一台电脑,你的名字叫 A 很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来。 用一根网线连接起来怎么就能&q…

二叉树链式结构基础

一、前中后序遍历 1、前序遍历:前序遍历是采用 根 - 左子树 - 右子树 的顺序遍历二叉树。 也就是把整棵树分为一个个子问题,每个结点都可以看作 根、左子树、右子树 三个部分 (左右子树可以为空,就是单节点,根为空就表示探索完成&…

自动化测试需知的4项测试工具!

一般来说学自动化会建议大家先学selenium,因为最早的时候,自动化就代表selenium,进入测试行业就开始做接口测试,而且现在基本每个公司都需要接口测试。今天就和大家聊一下接口测试的工具。 一、Robot Framework 机器人框架。之所…

利用证书给pdf文件添加数字签名

文章目录 给pdf文件签名文件准备构建印章获取证书方法一 阿里云申请证书方法二 自建证书 利用证书给pdf签名在指定位置签名在指定坐标签名在指定签名域签名 给pdf文件签名 如何给pdf文件签名,这样pdf文件就具有不可修改性,具有鉴权、完整性、不可抵赖。…

【操作系统笔记】内存寻址

物理寻址 主存(内存) 计算机主存也可以称为物理内存,内存可以看成由若干个连续字节大小的单元组成的数组每个字节都有一个唯一的物理地址(Physical Address)CPU访问内存前,先拿到内存地址,然后…

通讯网关软件005——利用CommGate X2OPC实现OPC客户端访问MS SQL服务器

本文推荐利用CommGate X2OPC实现OPC客户端访问MS SQL服务器获取数据。CommGate X2OPC是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,上位机通过OPC Client软件来获取MS SQL数据库的数据。 …

Qt扩展-KDDockWidgets 简介及配置

Qt扩展-KDDockWidgets 简介及配置] 一、概述二、编译 KDDockWidgets 库1. Cmake Gui 中选择源文件和编译后的路径2. 点击Config,配置好编译器3. 点击Generate4. 在存放编译的文件夹输入如下命令开始编译 三、qmake 配置 一、概述 kdockwidgets是一个由KDAB组织编写…

基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Pycharm 环境Scikit-learnt 模块实现1. 数据预处理2. 客流预测3. 百度地图API调用4. GUI界面设计1)手绘地图导入2)下拉菜单设计3)复选框设计4)最短路径结果输出界面…

睿趣科技:抖音开一家网店大概什么时候回本

随着移动互联网的迅猛发展,社交媒体平台如抖音成为了商家推广产品和服务的热门渠道之一。许多人都希望能够通过在抖音上宣传自己的产品,甚至考虑开一家网店,但回本的时间是一个关键问题。本文将探讨抖音开一家网店大概什么时候回本的问题。 首…

calloc

目录 前提须知: 函数介绍: 原型如下: 申请空间: 判断是否申请成功: 释放空间: calloc与malloc的相同之处与不同之处: 相同之处: 不同之处: 举例: ca…

API接口知识小结及电商数据平台商品详情接口请求案例

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

无涯教程-JavaScript - SUMXMY2函数

描述 SUMXMY2函数返回两个数组中相应值的差的平方和。 语法 SUMXMY2 (array_x, array_y)争论 Argument描述Required/OptionalArray_xThe first array or range of values.RequiredArray_yThe second array or range of values.Required Notes 参数应为数字或名称,数组或包…

Vite前端构建工具详解

Vite前端构建工具 Vite 是一款新兴的前端构建工具,它的出现带来了前端开发体验的革命性变化。本文将介绍 Vite 的基本概念和核心特性,并通过代码实例来演示其强大功能。 什么是 Vite? Vite 是由 Evan You(Vue.js 的创始人&#x…