JVM DVM ART

2019-03-14  本文已影响0人  小小卒_oO_

一.Java -> JVM

JAVA为每一个平台开发一个 JVM,即 Java 虚拟机。Java 编译器将 .java 文件转换成 .class文件,并提供给 JVM,由 JVM 将它转换成机器码。

二.Android -> DVM 和 ART

在 Android 中,Java 类被转换成 DEX 字节码。DEX 字节码通过 ART 或者 Dalvik runtime 转换成机器码。

三.JVM 与 DVM 对比

1. JVM使用栈架构,DVM使用寄存器架构。

2. JVM运行java字节码,DVM运行DEX 字节码。

DVM会用dx工具将所有的.class文件转换为一个.dex文件。



如上图所示,.jar文件里面包含多个.class文件,每个.class文件里面包含了该类的常量池、类信息、属性等等。当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,JVM的这种加载方式很慢,对于内存有限的移动设备并不合适。
而在.apk文件中只包含了一个.dex文件,这个.dex文件里面将所有的.class里面所包含的信息全部整合在一起了,这样再加载就提高了速度。.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中,减少了I/O操作,提高了类的查找速度。

3. DVM允许在有限的内存中同时运行多个进程

在Android中的每一个应用都运行在一个DVM实例中,每一个DVM实例都运行在一个独立的进程空间。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

四.ART 月 DVM 对比

ART将字节码变为机器码,占用了更多的空间,因为应用程序每次运行时不用重复编译,节省了能耗。


ART和DVM在GC上的区别:

DVM中GC的问题:

  1. GC时挂起所有线程
  2. 大而连续的空间紧张
  3. 内存碎片化严重

ART:

  1. 要求程序在分配空间的时候标记自身的堆栈,不需要挂起所有程序的线程。
  2. 提供 LOS :large object space 专供Bitmap使用,从而提高了GC的管理效率和整体性能。
  3. 有一个moving collector来压缩活动对象,使得内存空间更加紧凑。

参考:
https://www.jianshu.com/p/bdb6c29aca83
https://www.jianshu.com/p/038807ec68c3
http://www.cnblogs.com/jinkeep/p/3818180.html

上一篇下一篇

猜你喜欢

热点阅读