ART特性(ART features)

发现自己翻译一下可以加深影响,遂为之,刚开始,翻译的很烂。

这里介绍art的几个主要特性:

1)支持预先编译(Ahead-of-time(AOT) compilation)

ART中引入ahead-of-time (AOT) 编译,用来提高App性能另外,ART比Dalvik拥有更严格的安装时验证。 

安装时,ART使用dex2oat 工具来编译app,该工具以 DEX文件作为输入,生成一个编译好的App,它可以毫无困难的编译所有的有效的DEX文件。但是,有些post-processing的工具 tools会产生无效的文件,这些文件Dalvik中可以兼容,而在ART中不能被编译。 


注:ART不仅支持即时编译(JIT),而且支持预先编译(AOT)。在Dalvik上,每次软件运行,都需从字节码编译为原生代码,ART可以只编译一次。然后,软件每次运行时,执行编译好的原生代码。,即:ART把Bytecode的翻译优化从运行时提前到安装时,以空间换时间,从而达到更流畅的用户体验 。预先编译也为新的优化带来了可能性。同时,这也会明显改善电池续航,因为软件运行时不用编译了,从而减少了CPU的使用频率,降低了能耗。

ART 也有一些缺点。其中一个是,设备首次启动,以及应用的首次启动时间会变长,另一个缺点是原生代码占用空间更大,不过,现在设备的空间应该都足够。


2)改进的垃圾回收机制(Improved garbage collection)

ART在以下几个方面对GC做了改进:

垃圾回收启动后,不再是两次暂停,而是一次暂停。

在GC暂停期间,采用并发处理。

针对最新分配,短命(recently-allocated, short-lived )的对象的收集花费更短的时间

改进的垃圾回收机制,并发垃圾回收更及时,使得 GC_FOR_ALLOC  事件几乎不再发生。

压缩GC以减少后台的内存使用和碎片。

注:

在Dalvik虚拟机下,启动垃圾回收机制会造成两次暂停(一次在遍历阶段,一次在标记阶段)。所谓暂停,就是应用的所有线程都不再执行。如果暂停时间过长,应用渲染中就会出现掉帧。用户体验上来说,就是应用运行的时候出现卡顿。在ART下,在遍历阶段,应用不需要暂停,而标记阶段的暂停时间也大大缩短,因为 Google使用了一种新技术(packard pre-cleaning),在暂停前就做了许多事情,减轻了暂停时的工作量。


3)开发和调试方面的改进(Development and debugging improvements)

提供以下特性:

支持取样探查(Support for sampling profiler)

以往的开发使用TraceView工具作为profiler.TraceView尽管可以提供有效的信息,但TraceView工具本身会明显的影响运行的时间性能。

取样支持在KitKat版本中被加入TraceView,在ART中加入一个专用的取样探查工具,可以给出App运行时间的更精确的分析。

支持更多的调试特性

ART提供了一些新的调试选项,主要集中在监视器和垃圾回收相关的功能方面。如:

可以查看栈空间中有哪些锁,然后跳转到持有该锁的线程中

询问某个类有多少个活的实例,并查看这些实例及执行他们的引用

当函数存在时,查看该函数的返回值

为特定field设置观察点在该field被存取或修改时暂停应用程序。

异常和崩溃报告中提供更多诊断的细节

ART为java.lang.ClassCastExceptionjava.lang.ClassNotFoundException, 和java.lang.NullPointerException 提供了扩展的异常细节。


补充: Android的一些致命弱点,原因在于非原生应用和自动内存管理系统,ART在这些方面做出了大量改进。


你可能感兴趣的:(ART特性(ART features))