660
查看ART和Dalvik的源代码
ART和Dalvik
0
←
ART和Dalvik
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
你被禁止执行你刚才请求的操作。
您可以查看并复制此页面的源代码:
此页内容翻译自:https://source.android.com/devices/tech/dalvik/ ART,为 Android runtime的简称,它为 Andriod中应用程序和系统服务提供一种新的运行模式。ART和它的前任 Dalvik都是为 Android专门开发的。ART兼容 Dalvik的文件格式和 Dex文件规范。 既然 ART和 Dalvik都兼容 Dex文件规范,所以之前为 Dalvik开发的应用理应在 ART上也能正常运作。不过,仍有一些 Dalvik上的开发技巧在 ART上是不能使用的,可以点击[http://developer.android.com/guide/practices/verifying-apps-art.html 这里]作进一步了解。 = ART特性 = 这里列出的是 ART的一些主要特性: == AOT(Ahead-of-time)“运行前”编译 == ART 采用的是“运行前”(AOT)编译,这样使得运行效率得到提升。此外,与 Dalvik相比,ART在应用安装时有着更为严格的校验机制。 当应用安装时,ART通过 '''dex2oat'''工具对应用进行编译。这个工具可以把输入的 DEX文件编译生成当前机器兼容的可直接运行的执行机器码。理论上说,这个工具对所有正确的 DEX文件都应该是兼容的,但有些被预处理过的、不正确的 DEX文件,可能会出错(即使之前这些文件可以被 Dalvik相对较宽的校验机制通过)。[http://developer.android.com/guide/practices/verifying-apps-art.html#GC_Migration 更多内容] == 更优秀的垃圾回收机制 == 垃圾回收(GC)会影响应用的性能体验,导致界面卡顿、反应迟缓等等。ART在垃圾回收上的提升体现在以下几个方面: * GC的中断暂停从 Dalvik时的 2次减少为 1次 * 在 GC暂停时仍可并行处理其他事务 * 在回收刚创建的、生命周期较短的对象时,消耗的时间更短 * 更及时有效的回收机制,使得 GC_FOR_ALLOC事件更少发生 * 更少的内存占用和内存碎片 == 开发调试提升 == ART拥有一系列的特性,使得应用的开发和调试更为方便有效。 === 支持采样分析 === 在此之前,开发者一般使用 [http://developer.android.com/tools/help/traceview.html Traceview]。Traceview在提供的信息很有用,在 Dalvik中可以细化到到函数调用层面,同时在分析时性能会显著变慢。 ART支持专用的采样分析,规避了上面这些不足。它可以为应用提供更准确的度量,同时不会出现性能上的显著下降。在 KitKat版本上已经添加了对 Traceview的支持。 === 支持更多的调试特性 === ART支持一系统的调试选项,尤其是 监视和 垃圾回收相关方面。比如: * 查看堆栈中锁的保持者 * 查看当前某个类的活动对象数量,并查看这个对象及其引用 * 对特定对象进行事件过滤 * 查看某一函数的返回值 * 设置动态断点 === 更详尽的错误及异常信息 === 当运行抛出异常时,ART 会提供大量的运行信息。 ART 扩充细化了以下异常:[http://developer.android.com/reference/java/lang/ClassCastException.html java.lang.ClassCastException], [http://developer.android.com/reference/java/lang/ClassNotFoundException.html java.lang.ClassNotFoundException], [http://developer.android.com/reference/java/lang/NullPointerException.html java.lang.NullPointerException]。(ART和最新的 Dalvik一样,为 数组越界和 边界溢出 [http://developer.android.com/reference/java/lang/NullPointerException.html java.lang.NullPointerException]、 [http://developer.android.com/reference/java/lang/NullPointerException.html java.lang.NullPointerException]进行了扩充。) 例如,[http://developer.android.com/reference/java/lang/NullPointerException.html java.lang.NullPointerException] 异常信息包含这个空指针发生在哪个应用,并且这个应用要尝试操作写入哪个变量,或者在调用哪个函数。下面是一个例子: <pre> java.lang.NullPointerException: Attempt to write to field 'int android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object reference </pre> <pre> java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference </pre> 当应用出现 NE时,ART也能够提供相关信息,包括 Java层和 Native层的堆栈等等。 = 问题反馈 = 如果你遇到任何非 JNI类的问题,请通过 AOSP http://b.android.com 反馈。反馈时请包含 "adb bugreport"内容并提供对应 App在 Google Play上的链接;或者,如果可以,请把相关 APK作为附件上传。另外,请注意,反馈内容(包括附件)在网上都是公开的。 = 目录 = [[Dalvik位元码]]
返回
ART和Dalvik
。
导航菜单
个人工具
   
个人维基
注册
登录
名字空间
页面
变换
查看
阅读
查看源代码
统计
查看历史
操作
搜索
导航
首页
Ubuntu
Android
C&CPP
Java
Python
大杂烩
最近更改
工具箱
所有页面
文件列表
特殊页面