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实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级