Android虚拟机Dalvik和ART

2024-02-27 04:28
文章标签 android 虚拟机 dalvik art

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

这篇关于Android虚拟机Dalvik和ART的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751219

相关文章

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的