理想下载站 手游攻略 手游评测 硬核讲解:“Android虚拟机”的前世今生

硬核讲解:“Android虚拟机”的前世今生

时间:2024-10-16 20:49:33 来源: 浏览:39

前言

我进入 Androird 行业也有一段时间,目前负责项目开发方面的工作,难免会用到虚拟机实现代码运行,最近我也一直在思考,虚拟机是以哪种方式实现的,底层逻辑又是怎样的?于是在网上查阅了相关的资料,结合自身的见解,将之整合在了一起,接下来我们就来了解一下虚拟机的相关知识

虚拟机的前身

● 众所周知,Android 最开始面世时,使用的开发语言是 Java,而 Java 是运行在 Java 虚拟机上的,即 JVM;那么为什么 Google 要单独设计一套新的 Dalvik 虚拟机来执行 Android 程序呢?

● 可能是为了解决移动端设备上软件运行效率问题,可能是 JVM 虚拟机无法满足当时移动端的使用场景,也可能是为了规避与 Oracle 公司的版权纠纷问题,最终 Google 专门为 Android 平台设计了一套虚拟机来运行 Android 程序,它就是 Dalvik Virtual Machine(Dalvik 虚拟机)

● 随着 Android 发展至今,虽然目前开发 Android 程序的语言已经越来越多样性,如 Java,Kotlin,Dart,Flutter 等等,但无论使用哪种语言开发 Android,最终都需要运行在虚拟机上,本篇文章将站在 Android 虚拟机的视角来分析 Android 程序的运行原理

Dalvik 虚拟机概述及特点

Dalvik 虚拟机作为 Android 平台的核心组件,拥有如下几个特点:

● 体积小,占用内存空间小

● 专有的 DEX 可执行文件格式,体积更小,执行效率更快

● 常量池采用 32 位索引值,寻址类方法名、字段名、常量更快

● 基于寄存器架构,并拥有一套完整的的指令系统

● 提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能

所有的 Android 程序都运行在 Android 系统进程里,每个进程对应着一个 Dalvik 虚拟机实例

Java 虚拟机概述及特点

JVM 是 Java Virtual Machine(Java虚拟机)的缩写,是 JRE 的一部分;它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统;Java 虚拟机 JVM 是属于 JRE 的,而现在我们安装 JDK 时也附带安装了 JRE (当然也可以单独安装JRE)

JVM 拥有如下几个特点:

● JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行

● Java虚拟机实例负责运行一个Java程序,当启动一个Java程序时,一个虚拟机实例就诞生了。当程序结束,这个虚拟机实例也就消亡。在 Java虚拟机规范中,一个虚拟机实例的行为是分别按照子系统、内存区、数据类型和指令来描述的,这些组成部分一起展示了抽象的虚拟机的内部体系结构

● 作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对载入编译文件格式要求,任何语言都可以由JVM编译运行

Java虚拟机与Java语言并没有必然的联系,他只与特定的二进制文件格式—Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码,Bytecodes)和符号表,还有一些其他辅助信息

Dalvik 虚拟机与 Java 虚拟机的区别

从 Dalvik 虚拟机的特点我们可以看出 Dalvik VM 和 JVM 还是有许多的不同点的,两者并不兼容,他们显著的不同点主要有以下几个方面:

● Java 虚拟机运行的是 Java 字节码,Dalvik 虚拟机运行的是 Dalvik 字节码; 传统的 Java 程序经过编译,生成 Java 字节码保存在 .class 文件中,Java 虚拟机通过解码 .class 文件中的内容来运行程序

● 而 Dalvik 虚拟机运行的是 Dalvik 字节码,所有的 Dalvik 字节码由 Java 字节码转换而来,并被打包到一个 DEX(Dalvik Executable) 的执行的文件中,Dalvik 虚拟机通过解释 DEX 文件来执行这些字节码

总结

本质上,Dalvik也是一个Java虚拟机;但它特别之处在于没有使用JVM规范;大多数Java虚拟机都是基于栈的结构,而Dalvik虚拟机则是基于寄存器。基于栈的指令很紧凑

例如,Java虚拟机使用的指令只占一个字节,因而称为字节码;基于寄存器的指令由于需要指定源地址和目标地址,因此需要占用更多的指令空间

Dalvik虚拟机的某些指令需要占用两个字节,基于栈和基于寄存器的指令集各有优劣;一般而言,执行同样的功能,前者需要更多的指令(主要是load和store指令),而后者需要更多的指令空间;需要更多指令意味着要多占用CPU时间,而需要更多指令空间意味着数据缓冲(d-cache)更易失效

Android架构师之路还很漫长,与君共勉

用户评论

男神大妈

这款“Android虚拟机”游戏让我感受到了技术的魅力,以前对安卓系统了解不深,现在通过这个游戏学到了很多。

    有5位网友表示赞同!

拥菢过后只剰凄凉

玩了这个游戏后,我对移动操作系统有了全新的认识,感觉很有趣,希望有更多这样的教育类游戏推出。

    有8位网友表示赞同!

米兰

作为一个科技爱好者,“Android虚拟机”游戏满足了我对于技术的好奇心,值得推荐给身边的朋友。

    有10位网友表示赞同!

非想

游戏的操作界面设计得非常直观,即使是新手也能快速上手,体验非常好。

    有19位网友表示赞同!

青瓷清茶倾城歌

我喜欢这种能够边玩游戏边学习的模式,让学习变得不再枯燥。

    有18位网友表示赞同!

苏樱凉

游戏中模拟的各种安卓设备让我感到十分逼真,感觉自己真的在操控真实的手机一样。

    有20位网友表示赞同!

别在我面前犯贱

虽然有些功能可能需要付费解锁,但整体来说这是一款性价比很高的游戏。

    有10位网友表示赞同!

限量版女汉子

我在游戏中遇到了一些bug,不过开发者很快就给出了更新修复了这些问题,很负责。

    有10位网友表示赞同!

减肥伤身#

游戏的关卡设置循序渐进,让人既能学到知识又不会觉得难度太大。

    有20位网友表示赞同!

太难

作为一名程序员,我很享受在这个游戏中调试代码的过程,感觉很真实。

    有16位网友表示赞同!

泪湿青衫

我觉得这个游戏非常适合年轻人学习和探索新技术,同时也适合作为家庭教育的工具。

    有13位网友表示赞同!

剑已封鞘

有时候会卡顿,但我相信这只是暂时的,期待后续优化。

    有14位网友表示赞同!

水波映月

与市面上的其他类似游戏相比,“Android虚拟机”更加注重教育和用户体验。

    有19位网友表示赞同!

空谷幽兰

这款游戏不仅有趣,而且富有挑战性,让人欲罢不能。

    有17位网友表示赞同!

铁树不曾开花

游戏中的各种任务和挑战都非常有创意,激发了我的思考能力。

    有19位网友表示赞同!

花开丶若相惜

我希望开发团队能够持续更新内容,保持游戏的新鲜感。

    有6位网友表示赞同!

予之欢颜

如果能在游戏中加入更多的互动元素,比如与其他玩家协作完成任务,那就更好了。

    有5位网友表示赞同!

月下独酌

总的来说,“Android虚拟机”是一款很好的学习型游戏,我会继续支持它的发展。

    有10位网友表示赞同!

标题:硬核讲解:“Android虚拟机”的前世今生
链接:https://www.ltthb.com/news/sypc/130048.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
妄想山海怎么加好友 加好友方法大全

妄想山海怎么加好友 加好友方法大全[多图],妄想山海添加好友功能在哪里?妄想山海添加好友的方法是什么?好友添

2024-10-16
绯红之境兑换码最新2021 礼包兑换码大全

绯红之境兑换码最新2021 礼包兑换码大全[多图],绯红之境兑换码怎么领取?绯红之境兑换码有哪些?绯红之境在今日

2024-10-16
欢乐射手能提款吗 欢乐射手领红包是真的吗

欢乐射手能提款吗 欢乐射手领红包是真的吗[多图],欢乐射手能提款吗?欢乐射手领红包是真的吗?欢乐射手最近的广

2024-10-16
上古卷轴刀锋好玩吗?上古卷轴刀锋游戏评测

上古卷轴刀锋好玩吗?上古卷轴刀锋游戏评测[多图],上古卷轴刀锋游戏怎么样?想要知道游戏好不好玩,那么大家就要

2024-10-16