从Android 4.4开始就已经支持并且可选则的在运行时用ART替代Dalvik。
ART(Android RunTime)是Dalvik的下一个版本,Dalvik运行时的是字节码,且虚拟机的用途就是用来运行Android系统的应用程序。
ART有相较于Dalvik有两大特色:
(1)超前编译(AOT:Ahead-of-Time),主要用于提升速度和减少内存(没有JIT,当然会减少相应的内存开销)。
(2)提升了垃圾回收性能。
AOT意味着我们的app被一次性的编译成本地代码(native code),这种本地代码存储在手机上,在运行时是执行的高效的本地代码而不是字节码。但是因为解释器很慢(解释字节码时),所以虚拟机开发者发明了一个新的技术叫做Just-in-Time(即JIT)编译,这种技术将我们的代码飞快的编译为native coed。Dalvik就是典型的JIT虚拟机,但是JIT虚拟机的缺点在于:JIT编译器运行于我们在使用app的时候,也就是说只要我们在使用app,那么就伴随着JIT编译器的运行(想想都觉得对内存的消耗够大了。。。),这也就增加了内存潜在的压力。不过JIT编译器的优势在于:JIT编译器可以考虑将你正在使用的代码进行优化。
AOT和JIT类似,但是它只运行一次----当app在安装的时候运行一次。虽然AOT缺乏优化代码的能力,但是它缺可以通过较少的编译来执行更广泛的优化过的代码。自然地,在开机时ART会比Dalvik要慢,因为他编译系统一些apk需要时间,但是一旦运行起来,ART就会比Dalvik要快了。
值得一提的是,虽然在4.4上已经放出ART,但是并不是默认的选择,可以到设置>开发者选项>选择运行时间>使用ART。
ART(Android RunTime)是Dalvik的下一个版本,Dalvik运行时的是字节码,且虚拟机的用途就是用来运行Android系统的应用程序。
ART有相较于Dalvik有两大特色:
(1)超前编译(AOT:Ahead-of-Time),主要用于提升速度和减少内存(没有JIT,当然会减少相应的内存开销)。
(2)提升了垃圾回收性能。
AOT意味着我们的app被一次性的编译成本地代码(native code),这种本地代码存储在手机上,在运行时是执行的高效的本地代码而不是字节码。但是因为解释器很慢(解释字节码时),所以虚拟机开发者发明了一个新的技术叫做Just-in-Time(即JIT)编译,这种技术将我们的代码飞快的编译为native coed。Dalvik就是典型的JIT虚拟机,但是JIT虚拟机的缺点在于:JIT编译器运行于我们在使用app的时候,也就是说只要我们在使用app,那么就伴随着JIT编译器的运行(想想都觉得对内存的消耗够大了。。。),这也就增加了内存潜在的压力。不过JIT编译器的优势在于:JIT编译器可以考虑将你正在使用的代码进行优化。
AOT和JIT类似,但是它只运行一次----当app在安装的时候运行一次。虽然AOT缺乏优化代码的能力,但是它缺可以通过较少的编译来执行更广泛的优化过的代码。自然地,在开机时ART会比Dalvik要慢,因为他编译系统一些apk需要时间,但是一旦运行起来,ART就会比Dalvik要快了。
值得一提的是,虽然在4.4上已经放出ART,但是并不是默认的选择,可以到设置>开发者选项>选择运行时间>使用ART。