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实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以