美文网首页
JVM 虚拟机系列----(一)JVM和Dalvik、ART的区

JVM 虚拟机系列----(一)JVM和Dalvik、ART的区

作者: 梦飞成2012 | 来源:发表于2017-10-17 17:24 被阅读31次

Android写了那么久了,Java语言用了好几年了,但是对JVM这一块的了解却还处在菜鸟的阶段。这主要是,平时工作中很少与底层虚拟机打交道。但是随着工作的深入,慢慢的发现底层还是有必要了解的,对工作中的一些问题的思考还是很有帮助的。
本系列旨在浅析JVM虚拟机的轮廓,让我们这些做上层应用的程序员对底层虚拟机也有个概念,对虚拟机的类加载、内存模型、垃圾回收与内存分配等机制有一定的了解,为解决日常开发中的困惑提供一点帮助。
废话不多说,马上开始。

一、JVM

JVM是Java Virtual Machine的缩写,中文翻译Java虚拟机。JVM的主要作用就是,将编译器编译后的Java字节码,转换为各个平台可运行的机器码。
当然JVM还做了很多事情,比如类加载、内存管理、IO等等。
下图很好的诠释了JVM的左右。

image.png
那么问题来了,都说Java是跨平台的,那么跨平台的是Java程序,还是JVM虚拟机呢?
还有疑惑,请看这里Java程序的跨平台性

二、Dalvik虚拟机

Dalvik是谷歌公司出的一款针对Android的虚拟机,专门为运行Android的程序打造的。Dalvik不是真正意义上的JVM,比如Dalvik运行的是dex文件,而JVM运行的是class字节码。class就是一个简单的类,而dex是一个文件,可能包含很多class文件,因此它可以将重复的常数、字符串保存在一个地方,从而节省空间。
还有一个区别是,JVM指令集是基于栈的,Dalvik是基于寄存器的。
基于栈的指令集,更紧凑,节省空间,对不同OS的兼容性会更好,但是load/store次数更多,访问内存次数会增多。基于寄存器的指令集虽然占用空间大,但是访问内存次数少,速度会相对快,但是对不同OS(确切的说是处理器架构)兼容不好,因此Android支持的是ARM架构。
除此之外,Dalvik和JVM有很多相似之处,如垃圾回收机制、类加载机制、内存模型等等。

三、ART虚拟机

ART是Android Runtime的缩写。在Android4.4之后推出了ART,在5.0之后,用ART代替了Dalvik虚拟机。
Dalvik使用即时编译技术(Just In Time,简称JIT),即每次启动应用都会进行编译转换为本地机器码,影响运行效率。而ART在第一次安装的时候,进行预编译(Ahead Of Time,AOT),提升了安装效率。
注:在Android的7.0之后,谷歌对ART又进行了优化,第一次安装不再编译,在运行时候编译,产生profile文件,在后续手机空闲时候,扫描app,找出常用APP,执行编译剩余的部分,解决占用空间和安装时间长的问题。

所以,ART和Dalvik的区别主要有以下几点:
1、应用运行效率,ART由于不需要在启动的时候编译,效率更快。
2、占用空间,ART需要将编译后的机器码保存会占用空间更大,一般大10-20%左右。
3、安装时间,由于在安装的时候ART编译,会导致安装时间更长。

参考链接:

1、JVM、Dalvik、ART 介绍
2、Dalvik 虚拟机和 Sun JVM 在架构和执行方面有什么本质区别?
3、JVM、Dalvik、ART傻傻分不清楚?

相关文章

  • 理解Dalvik和ART、JVM虚拟机

    理解基本的Dalvik和ART、JVM虚拟机 一、Dalvik介绍 Dalvik VM是Android平台的核心组...

  • Android 虚拟机—Dalvik&ART

    Dalvik 虚拟机与ART 虚拟机 Dalvik是什么? Dalvik 是实现了 JVM 规范的虚拟机,内部默认...

  • Android 热修复原理解析

    前期我们已经讨论过了JVM ClassLoader机制以及理解Dalvik和ART、JVM虚拟机,今天带着大家来分...

  • Android虚拟机与类加载机制

    JVM和Dalvik/ART Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个...

  • JVM 虚拟机系列----(一)JVM和Dalvik、ART的区

    Android写了那么久了,Java语言用了好几年了,但是对JVM这一块的了解却还处在菜鸟的阶段。这主要是,平时工...

  • 虚拟机

    前言 本篇文章将会介绍Java虚拟机(JVM)的结构等基础知识、Dalvik(DVM)/ART虚拟机与JVM的比较...

  • 虚拟机概述

    前言 本篇文章将会介绍Java虚拟机(JVM)的结构等基础知识、Dalvik(DVM)/ART虚拟机与JVM的比较...

  • 类加载器

    Android有两种虚拟机,分别是Dalvik和ART。而Java有自己的虚拟机,是大家熟知的JVM。Dalvik...

  • 2021-02-24

    JVM、Dalvik、ART三者的关系 JVM、Dalvik、ART三者的关系[https://www.jians...

  • Android中什么是Dex文件

    在明白什么是Dex文件之前,要先了解一下JVM,Dalvik和ART。JVM是JAVA虚拟机,使用运行JAVA字节...

网友评论

      本文标题:JVM 虚拟机系列----(一)JVM和Dalvik、ART的区

      本文链接:https://www.haomeiwen.com/subject/slloyxtx.html