Android的ART和Dalvik

版权声明:您好,转载请留下本人博客的地址,谢谢 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来降低后台内存使用和碎片

    扫描二维码关注公众号,回复: 4918984 查看本文章

开发和调试提升

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相关的知识。

猜你喜欢

转载自blog.csdn.net/hongbochen1223/article/details/58374241