Android的ART和Dalvik

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/58374241 Android 运行时机制,即为ART,是一个管理的运行时机制,被android系统上的应用程序和一些系统服务使用。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/58374241

Android 运行时机制,即为ART,是一个管理的运行时机制,被android系统上的应用程序和一些系统服务使用。ART和他的前辈Dalvik初始被创建专门用于Android项目。ART作为运行时可以执行Dalvik可执行格式和Dex字节码的规范。

ART和Dalvik在运行Dex字节码上是兼容的,所以为Dalvik开发的apps应该在运行ART的系统上也能够正常运行。然而,一些专门为Dalvik设计的技术不能运行在ART运行时中。

ART的特征


下面是一些由ART实现的主要特征:

提前编译(AOT)

ART引入了AOT编译,这样的方式可以提高app的性能。ART也有比Dalvik更加紧凑的安装时间验证。

在安装时间上,ART使用设备上的dex2oat工具编译。这个工具接收DEX文件作为输入,并且为目标设备生成一个编译的可运行的app。这个工具能够不费吹灰之力的编译所有有效的DEX文件。然而,一些Dalvik可允许的后处理工具生成的无效文件是不能被ART编译的。

提升垃圾回收

垃圾回收机制(GC)可以减低一款app的性能,导致波浪显示,低效的UI响应和其他问题。ART通过几种方式来提高垃圾回收:

  1. 一个GC暂停而不是两次

  2. 在剩余的GC暂停期间,并行处理

  3. 收集器拥有更少的整个GC时间,用于清理最近分配的,短周期对象

  4. 提高垃圾回收机制的工效,使并行的垃圾回收更加及时,这使得GC_FOR_ALLOC在典型的使用例子中更加稀少

  5. 压紧GC来降低后台内存使用和碎片

开发和调试提升

ART提供了一些体征来提升app开发和调试。

支持样例分析

在历史上,开发者使用Traceview工具(设计用来追踪应用执行)作为一个分析器。然而,Traceview给了有用的信息,在Dalvik上,他的结果已经被每次函数调用过量影响了,并且这个工具的使用也明显的影响了运行时的性能。

ART添加了专门的样例分析器支持,该分析器并没有这些限制。这给了对app执行更加精确的视图但没有明显的变慢。在KitKat发行版中,Dalvik已经将样例支持添加到Traceview中了。

支持更多调试特征

ART支持许多新的调试选项,尤其是在监视和垃圾回收相关的功能上。例如,你可以:

  • 在栈追踪中查看什么锁被持有,然后跳转到持有这个锁的线程中。

  • 查询一个给定的类有多少存在的实例,请求查看实例,并且查看什么引用正在包一个对象生存。

  • 对一个指定的实例过滤事件(类似于断点)

  • 查看一个方法的返回值,如果他存在的话(使用”method-exit”事件)。

  • 当一个指定的域被访问或者是修改,设置域观察点来暂停程序的运行

在异常和崩溃报告中,提升判断细节

当运行时异常发生的时候,ART给了你尽可能多的上下文和细节。ART为java.lang.ClassCastException, java.lang.ClassNotFoundException, and java.lang.NullPointerException提供了扩展的异常细节。

举个例子,java.lang.NullPointerException现在展示了关于app正在尝试操作什么空指针,例如app正在尝试写入的域,或者是他正在尝试调用的方法,下面是一个典型的例子:


java.lang.NullPointerException: Attempt to write to field 'int android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object reference

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

ART在app本地崩溃报告中也提供了提升的上下文信息,包括Java和本地栈信息。在后面几篇博客中,我们专门介绍Android的ART和Dalvik相关的知识。

目录
相关文章
|
4月前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【7月更文挑战第28天】在Android开发中,掌握底层机制至关重要。从Dalvik到ART, Android通过采用AOT编译在应用安装时预编译字节码至机器码,显著提升了执行效率。ART还优化了垃圾回收,减少内存占用及停顿。为了优化性能,可减少DEX文件数量、优化代码结构利用内联等技术、合理管理内存避免泄漏,并使用ART提供的调试工具。
113 7
|
2月前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【9月更文挑战第12天】在Android开发领域,深入了解其底层机制对提升应用性能至关重要。本文详述了从早期Dalvik虚拟机到现今Android Runtime(ART)的演变过程,揭示了ART通过预编译技术实现更快启动速度和更高执行效率的奥秘。文中还介绍了ART的编译器与运行时环境,并提出了减少DEX文件数量、优化代码结构及合理管理内存等多种性能优化策略。通过掌握这些知识,开发者可以从全新的角度提升应用性能。
63 11
|
Java 开发工具 Android开发
安卓逆向系列篇:Dalvik概念&破解实例(二)
安卓逆向系列篇:Dalvik概念&破解实例
179 0
|
Java API Android开发
安卓逆向系列篇:Dalvik概念&破解实例(一)
安卓逆向系列篇:Dalvik概念&破解实例
177 0
|
存储 安全 IDE
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi
263 0
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi
|
缓存 监控 安全
❤️Android Runtime (ART) 和 Dalvik❤️
目录 1. Dalvik 1.1 Dalvik 和 JVM 区别 1.2 Dalvik 如何运行 java 1.3 dex文件 1.4 65535 2. Android Runtime (ART) 2.1 ART 功能 2.1.1 预先 (AOT) 编译 2.1.2 垃圾回收方面的优化 2.1.3 开发和调试方面的优化 2.2 Android 8.0 中的 ART 功能改进 2.2.1 并发压缩式垃圾回收器 2.2.2 循环优化 2.2.3 类层次结构分析 2.2.4 .oat 文件中的内嵌缓存 2.2.5 Dexlayout 2.2.6 Dex 缓存移除
497 0
❤️Android Runtime (ART) 和 Dalvik❤️
|
存储 缓存 Oracle
Android 逆向笔记 —— 说说 Dalvik 及其指令集
Android 逆向笔记 —— 说说 Dalvik 及其指令集
Android 逆向笔记 —— 说说 Dalvik 及其指令集
|
Android开发
【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | native 函数查询 | dalvik_system_DexFile.cpp#defineClassNative 函数 )
【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | native 函数查询 | dalvik_system_DexFile.cpp#defineClassNative 函数 )
190 0
【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | native 函数查询 | dalvik_system_DexFile.cpp#defineClassNative 函数 )
|
安全 Java Android开发
【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
275 0
【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
|
Android开发
【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )
【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )
206 0
【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )