Android虚拟机Dalvik和ART

前言:Android虚拟机包括Dalvik和ART,它们是用于在Android设备上运行应用程序的关键组件。


Dalvik虚拟机:


1. 设计目的:
   Dalvik虚拟机是在Android早期版本中使用的虚拟机,其设计目的是为了在资源受限的移动设备上执行Java字节码。它采用了just-in-time (JIT) 编译的方式,即在运行时将字节码转换为本地机器代码。
2. 执行方式:
   Dalvik虚拟机在应用程序安装时将Java字节码转换为.dex(Dalvik Executable)文件格式。在运行时,每个应用程序都有自己的Dalvik实例,并且Dalvik通过运行DEX文件中的字节码来执行应用程序。
3. 内存管理:
   Dalvik使用基于寄存器的内存模型,每个线程都有自己的寄存器集。这有助于在资源有限的移动设备上更有效地管理内存。

ART虚拟机:


1. 设计目的:
   Android Runtime (ART) 是Android 5.0及以后版本引入的虚拟机。与Dalvik不同,ART采用了ahead-of-time (AOT) 编译的方式,即在应用程序安装时将字节码转换为本地机器代码。
2. 执行方式:
    在应用程序安装期间,ART将字节码转换为本地机器代码,并将其保存在设备上。当应用程序运行时,它直接执行本地机器代码,而不是解释字节码。这提高了应用程序的运行效率。
3. 内存管理:
   ART采用更先进的垃圾回收策略,如并发垃圾回收,以提高内存管理的效率。它还引入了一些优化,以减少应用程序的启动时间和减少功耗。


切换过程:


1. Dalvik到ART的转变:
    Android 5.0及以后的版本,Google将ART引入为默认的运行时环境,取代了Dalvik。这个转变提供了更好的性能、更低的功耗和更好的应用程序响应时间。
2. 应用程序的兼容性:
   大多数应用程序不需要进行修改,因为ART可以在运行时处理Dalvik字节码。然而,ART的引入带来了更好的性能和系统优化,因此一些应用可能会受益于重新编译以利用ART的特性。
总体而言,ART在性能和资源利用方面相对更优,但Dalvik仍然在一些较旧的设备上使用。 Android虚拟机的不断演进是为了提供更好的用户体验和应用程序性能。

它们之间的一些比较和优劣势


Dalvik与ART的比较:
性能:Dalvik采用的是即时编译(JIT)方式,即在运行时将字节码转换为机器码,因此启动速度可能较慢,但运行时性能可能会更好,因为它可以根据实际执行情况进行优化。相比之下,ART采用的是预编译(AOT)方式,即在应用安装时将字节码转换为机器码,因此应用启动速度可能更快,但在一些情况下可能会牺牲一些内存。


内存占用:由于Dalvik是在运行时将字节码转换为机器码,因此可能需要更多的内存空间来存储生成的机器码,尤其是对于大型应用来说。而ART在应用安装时就将字节码转换为机器码,因此可能需要更多的存储空间,但在运行时可以更有效地利用内存。


启动时间:由于ART在应用安装时就将字节码转换为机器码,因此应用的启动时间可能会更快,因为不需要在运行时进行编译。相比之下,Dalvik在应用运行时需要花费一些时间来将字节码转换为机器码,因此启动时间可能会略慢一些。


系统优化:ART引入了一些系统优化,如更先进的垃圾回收策略和更有效的内存管理,这些优化可以提高系统的稳定性和性能。相比之下,Dalvik的优化可能较少,因为它是早期Android版本的虚拟机。


兼容性:大多数应用程序不需要进行修改即可在Dalvik和ART之间切换,因为ART可以在运行时处理Dalvik字节码。然而,ART的引入可能会带来一些系统级的改变,因此一些较老的应用可能需要进行一些调整才能更好地利用ART的优势。
 

它们在开发和调试过程中的一些影响以及在移动应用程序生命周期中的角色


开发和调试:
1. Dalvik:Dalvik在开发和调试过程中可能会面临一些挑战。由于它是在运行时将字节码转换为机器码,因此在调试时可能需要更多的时间来执行和测试代码。此外,由于Dalvik是在应用运行时才执行优化,因此可能需要更多的迭代和测试才能达到期望的性能水平。


2. ART:ART在开发和调试过程中可能会提供一些优势。由于它是在应用安装时将字节码转换为机器码,因此在调试时可能会有更快的启动和执行时间。此外,ART的优化可以提高代码执行的效率,从而加速开发和调试过程。


应用程序生命周期:
1. Dalvik:对于在Dalvik上运行的应用程序,开发人员可能需要考虑到即时编译的影响,尤其是在处理性能敏感的应用程序时。他们可能需要优化代码以减少运行时的延迟,并确保应用在各种设备上都能良好运行。
2. ART:在ART上运行的应用程序可能会受益于预编译的优势,因为它可以提供更稳定和一致的性能。开发人员可以更自信地设计应用程序,因为他们可以预期应用在各种设备上的表现更加稳定。


迁移和优化:
1. Dalvik到ART迁移:对于现有的应用程序,迁移到ART可能需要一些额外的工作,特别是在重新编译和优化方面。开发人员可能需要评估应用程序的性能和内存使用情况,并根据需要进行调整以利用ART的优势。


2. 优化和性能调整:无论是在Dalvik还是ART上运行,优化和性能调整都是重要的。开发人员可能需要使用工具和技术来分析应用程序的性能,并进行必要的调整以确保其在各种情况下都能良好运行。
 

它们对移动应用程序安全性的影响以及在移动应用开发生态系统中的角色


安全性考虑:
1. Dalvik:Dalvik在安全性方面可能存在一些潜在风险。由于它是在运行时执行字节码,因此可能存在一些动态分析和代码注入的风险。此外,Dalvik的即时编译方式可能会使应用程序更容易受到反编译攻击,从而泄露敏感信息或者被篡改。


2. ART:ART在安全性方面可能提供一些优势。由于它是在应用安装时将字节码转换为机器码,因此可以减少动态分析和代码注入的风险。此外,ART的预编译方式可能会增加应用程序的安全性,因为机器码不容易被逆向工程或者篡改。


在移动应用开发生态系统中的角色:
Dalvik:尽管Google已经将ART作为默认的运行时环境,但一些旧设备和定制的Android版本可能仍在使用Dalvik。因此,对于开发人员来说,仍然需要考虑Dalvik的兼容性,并确保他们的应用程序在不同版本的Android系统上都能够正常运行。


ART  :ART作为Android的主要运行时环境,扮演着关键的角色。开发人员应该针对ART进行优化,并利用其提供的性能和安全性优势。通过了解ART的特性和工作原理,开发人员可以更好地设计和优化他们的应用程序,以提供更好的用户体验。


 性能监控和优化:
Dalvik:对于在Dalvik上运行的应用程序,开发人员可能需要使用性能监控工具来分析应用程序的运行状况,并进行必要的优化。他们可能需要关注即时编译的影响,并尝试减少运行时的延迟以提高应用程序的响应性能。


ART:在ART上运行的应用程序可能会受益于更稳定和一致的性能,但仍然需要进行性能监控和优化。开发人员可能需要关注应用程序的启动时间和内存使用情况,并根据需要进行调整以确保其在不同设备上都能良好运行。
 

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

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

相关文章

项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136277231 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

全面升级!Apache HugeGraph 1.2.0版本发布

图数据库以独特的数据管理和分析能力,在企业数智化转型的过程中正在成为数据治理的核心,根据IDC调研显示,95%的企业认为图数据库是重要的数据管理工具,超过65%的厂商认为在业务上图数据库优于其他选择,尤其是在金融风控…

Linux设备模型(四) - uevent应用:内核发送uevent,用户空间接收uevent

1,内核发送uevent 内核发送uevent的API由lib/kobject_event.c文件实现,include/linux/kobject.h是头文件。 enum kobject_action {KOBJ_ADD,KOBJ_REMOVE,KOBJ_CHANGE,KOBJ_MOVE,KOBJ_ONLINE,KOBJ_OFFLINE,KOBJ_MAX };/* kobject_uevent不能用在中断上下…

2024年2月19日-2月25日(全面进行+收集免费虚幻商城资源,20小时,合计2561小时,剩余7439小时)

试试周一到周五重点进行,周末抄写源码,周一晚上看书很快就在22:00睡着,早上可以看看视频教程,出租车上补觉。 执行如下: 周一: 8:01-9:20ue4 rpg(184&#xf…

Unity零基础到进阶 | Unity中的 RectTransformUtility 方法整理汇总

Unity零基础到进阶 ☀️| RectTransformUtility 方法整理汇总一、RectTransformUtility 官方文档1.1 RectTransformUtility.CalculateRelativeRectTransformBounds(重)1.2 RectTransformUtility.FlipLayoutAxes1.3 RectTransformUtility.FlipLayoutOnAxi…

观察者模式与发布订阅模式

观察者模式 定义: 观察者模式是一种行为型设计模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 结构图: ES6简易代码实现: //ts环境下…

Nginx——安装和反向代理

Nginx安装与应用 1.1 Nginx介绍 Nginx 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强 Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等。但是不支持java。Java程序只能通过与tomcat配合…

谷歌AI发展史:从阿尔法围棋到Gemini与Gemma的开源创新

谷歌一直是人工智能领域的重要推动者。本文将回顾谷歌AI的发展历程,从阿尔法围棋到现如今的Gemini和Gemma,探讨谷歌在人工智能领域的重大突破和创新。 1. 引言 在计算机科学领域,谷歌一直是人工智能(AI&#xff0…

华为OD机试真题-数的分解-2023年OD统一考试(C卷)--Python3-开源

参考链接: 华为OD机试真题-用连续自然数之和来表达整数-2023年OD统一考试(C卷)—python代码免费

MasterAlign全景视觉点胶应用软件说明书

MasterAlign视觉软件通过高精度的图像处理和机器学习算法,实现了对点胶过程的全面控制和管理。以下是关于MasterAlign在全景视觉点胶应用场景中如何使用的详细说明。看完全文相信一定能让您快速上手使用。

刷题第1天:leetcode704--数组元素查找--二分法查找算法

第一部分---数组的基础知识介绍: 1.数组的定义:数组是存放在连续内存空间上的相同数据类型的数据的集合; 2.数组可以通过下标索引的方式获取到下标对应的数据; 3.数组下标是从0开始的,数组的内存空间地址是连续的&a…

多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型

多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型 目录 多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍…

基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

适配器模式(Adapter Pattern)

定义 适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户希望的另一个接口。这种模式通常用于解决接口不兼容的问题。适配器模式包括三个角色:目标接口(Target)、适配器(Adapter)和被适配者&…

设计模式(六)代理模式

相关文章设计模式系列 1.代理模式简介 代理模式介绍 代理模式也叫委托模式,是结构型设计模式的一种。在现实生活中我们用到类似代理模式的场景有很多,比如代购、代理上网、打官司等。 定义 为其他对象提供一种代理以控制这个对象的访问。 代理模式…

【Elasticsearch专栏 18】深入探索:Elasticsearch核心配置与性能调优 保姆级教程 企业级实战

文章目录 导言01 内存设置优化1.1 JVM堆内存设置1.2 禁用Swap分区1.3 线程栈内存设置 02 文件描述符限制优化2.1 查看当前的文件描述符限制2.2 临时更改文件描述符限制2.3 永久更改文件描述符限制2.4 Elasticsearch文件描述符配置2.5 验证更改 03 网络和I/O优化3.1 网络优化3.2…

Layer1 明星项目 Partisia Blockchain 何以打造互操作、可创新的数字经济网络

我们的目标是创建一个以用户为中心的全新数字经济网络:在去信任化和公平透明的环境下,所有的隐私数据都能够得到天然保障,企业、用户等各角色的协作与共享将会更顺利地进行。 —— Partisia Blockchain 团队 作为一个以 Web3 安全为技术方向的…

Linux学习之vi/vim详细介绍

目录 ​编辑 1. 什么是 vim? 2. vi/vim 的使用 2.1 命令模式 2.2 输入模式 2.3 底线命令模式 3. vi/vim 使用实例 3.1 使用 vi/vim 进入一般模式 3.2 按下 i 进入输入模式(也称为编辑模式),开始编辑文字 3.3 按下 ESC 按钮回到一般模式…

jenkins+kubernetes+git+dockerhub构建devops云平台

Devops简介 k8s助力Devops在企业落地实践 传统方式部署项目为什么发布慢,效率低? 上线一个功能,有多少时间被浪费了? 如何解决发布慢,效率低的问题呢? 什么是Devops? 敏捷开发 提高开发效率&…

CKA认证,开启您的云原生之旅!

在当今数字化时代,云计算已经成为企业和个人发展的关键技术。而获得CKA(Certified Kubernetes Administrator)认证,将是您在云原生领域迈出的重要一步。 CKA认证是由Kubernetes官方推出的权威认证,它旨在验证您在Kuber…