Android中的ART和Dalvik对比
来源:互联网 发布:ubuntu系统软件包缺失 编辑:程序博客网 时间:2024/05/08 01:59
概述
之前也一直零零散散的看过Android运行时与Dalvik,但是都没有没有总结成文字,这里总结一下几篇相关博客中的介绍。
维基百科:Dalvik虚拟机
维基百科:Android Runtime
Dalvik 是一个执行dex文件的Java虚拟机
而ART则提供一套完全与Java虚拟机兼容的接口,因此可以在4.4之后无缝将Dalvik替换成ART,这里可以查看:Android ART运行时无缝替换Dalvik虚拟机的过程分析
Dalvik与JVM
Dalvik是Android平台的虚拟机,在应用每次运行的时候会 将 dex文件 编译为 机器码。
- Dalvik使用.dex格式,而Java虚拟机使用的是class格式
- 一个dex文件可以包含若干个类
- Dalvik指令是基于寄存器的,Java虚拟机使用的指令集是基于堆栈的
- 自Android 2.2开始,Dalvik支持JIT技术
Dalvik虚拟机的其它特性(Dalvik虚拟机简要介绍和学习计划)
Dalvik的内存管理
Dalvik虚拟机的内存大体上可以分为Java Object Heap、Bitmap Memory和Native Heap三种
Java Object Heap
- Java Object Heap是用来分配Java对象,通过代码new出来的对象都是位于Java Object Heap上的。
- 可以通过ActivityManager类的成员函数getMemoryClass来获得Dalvik虚拟机的Java Object Heap的最大值
Bitmap Memory
也称为External Memory,HoneyComb之前,是用来处理图像的,
- Bitmap Memory是在Native Heap中分配的,但同样计入Java Object Heap中。
- 在HoneyComb以及更高的版本中,Bitmap Memory就直接是在Java Object Heap中分配了,可以直接接受GC的管理。
- 因为Native Heap不受Java Object Heap的大小限制,因此处理大图像时,容易抛出OutOfMemoryError。
- 可通过android:largeHeap来通知Dalvik虚拟机应用程序需要使用较大的Java Object Heap,但不建议这么做。
Native Heap
在Native Code中使用malloc等分配出来的内存
- 不受Java Object Heap的大小限制,但会受到系统的限制,可以自由使用
- 滥用Native Heap会导致系统可用内存急剧减少,导致系统采取激进的措施来Kill掉某些进程
Dalvik垃圾收集(GC)
在GingerBread之前,Dalvik虚拟使用的垃圾收集机制有以下特点:
- Stop-the-world,也就是垃圾收集线程在执行的时候,其它的线程都停止;
- Full heap collection,也就是一次收集完全部的垃圾;
- 一次垃圾收集造成的程序中止时间通常都大于100ms。
在GingerBread以及更高的版本中,Dalvik虚拟使用的垃圾收集机制得到了改进,如下所示:
- Cocurrent,也就是大多数情况下,垃圾收集线程与其它线程是并发执行的;
- Partial collection,也就是一次可能只收集一部分垃圾;
- 一次垃圾收集造成的程序中止时间通常都小于5ms。
即时编译(JIT)
Dalvik虚拟机从Android 2.2版本开始,才支持JIT,而且是可选的
本地调用JNI
- JNI机制既支持在Java函数中调用C/C++函数,也支持在C/C++函数中调用Java函数
进程和线程管理
- 每一个Android应用程序进程都有一个Dalvik虚拟机实例
- 每一个Android应用程序进程都是由一种称为Zygote的进程fork出来的
ART
是一种在Android操作系统上的运行环境,ART能够在第一次安装的时候,把应用程序的字节码转换为机器码。采用了预编译(AOT,Ahead-Of-Time)技术。
- ART运行的仍然是一个包含dex字节码的APK文件;
- AOT在在应用安装的时候将应用的dex字节码翻译成本地机器码;
ART的优点
- ART 性能高于采用JIT的Dalvik
- 应用启动更快、运行更快、体验更流畅、触感反馈更及时
- 更长的电池续航能力
- 支持更低的硬件
ART的缺点
- 字节码变为机器码之后,占用的存储空间更大
- 应用的安装时间会变长。
参考:
Android 中的Dalvik和ART是什么,有啥区别?
Android运行时ART简要介绍和学习计划
0 0
- Android中的ART和Dalvik对比
- Android 中的Dalvik和ART
- Android 中的Dalvik和ART
- Android Dalvik虚拟机和ART虚拟机对比
- Android的ART和Dalvik
- Android中的Dalvik和ART详解及区别分析
- Android中的Dalvik和ART有啥区别?
- Android 中的Dalvik和ART是什么,有啥区别?
- Android 中的Dalvik和ART是什么,有啥区别?
- Android 中的Dalvik和ART是什么,有啥区别?
- art dalvik gc对比
- Dalvik对比ART差异
- ART(Android Runtime)和dalvik和jvm的解释和对比
- ART与Dalvik哪个好 ART模式和Dalvik模式区别对比
- ART与Dalvik哪个好用 ART模式和Dalvik模式区别对比分析
- Android 5.0 ART GC 对比 Android 4.x Dalvik GC
- Android 5.0 ART GC 对比 Android 4.x Dalvik GC
- 科普:Android 关于Dalvik和ART
- 在显示的图像中画一个矩形
- 77. Combinations
- PAT A1067. Sort with Swap(0,*) (25)
- GIS在线学堂开课招生了
- canvas-share
- Android中的ART和Dalvik对比
- php使用smtp发送邮件报错Error: Cannot connenct to relay host smtp.163.com Error: ()解决方法
- 大数据工程师面试题(二)
- linux学习笔记——yum安装软件、搭建仓库、rpm命令
- Fail Fast Vs Fail Safe
- import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
- 可能是一份没什么用的爬虫代理IP指南
- linux下编译opencv程序
- 托福写作8-learning foreign language in the foreign country