前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA虚拟机与Android虚拟机的区别

JAVA虚拟机与Android虚拟机的区别

作者头像
老马的编程之旅
发布2022-06-22 14:36:21
1.1K0
发布2022-06-22 14:36:21
举报
文章被收录于专栏:深入理解Android

1.JAVA虚拟机运行的是JAVA字节码,Dalvik虚拟机运行的是Dalvik字节码 java虚拟机:JAVA->class文件 dalvik虚拟机:JAVA->class文件->Dalvik字节码->打包到dex中->DVM通过解释DEX文件来执行这些字节码。

class文件的缺点 如果A类文件引用B类文件中的方法,方法签名也会被复制到A类文件中, 多个不同的类会同时包含相同的方法签名 大量的字符串常量在多个类文件中也被重复使用 因为大量的冗余信息,会严重影响jvm虚拟机解析文件的效率。

Dalvik虚拟机 SDK中有个dx工具负责将JAVA字节码转换为Dalvik字节码,**对JAVA类文件重新排列,**将所有JAVA类文件中的常量池分解,消除其中的冗余信息,重新组合形成一个常量池,所有的类文件共享同一个常量池,使得相同的字符串、常量在DEX文件中只出现一次,从而减小了文件的体积。

在这里插入图片描述
在这里插入图片描述

2.JVM基于栈,DVM基于寄存器 关于栈式虚拟机: 1.代码必须使用这些指令来移动变量(即push和pop) 2.代码尺寸小和解码效率会更高些

关于寄存器式虚拟机: 1.基于寄存器代码免去了使用push和pop命令的麻烦,减少了每个函数的指令总数。 2.代码尺寸和解码效率不如基于栈虚拟机,因为它包含操作数,所以指令大于基于堆栈的指令。但是基于寄存器产生更少的代码,所以总的代码数不会增加。 3.寄存器虚拟机必须从操作指令中解码操作数,需要额外的解码操作。

与JVM相似,在Dalvik VM中每个线程都有自己的PC和调用栈

与JVM不同的是,Dalvik VM的栈帧中没有局部变量区与求值栈,取而代之的是一组虚拟寄存器

3.ART虚拟机,和JVM/DVM有什么不同? JIT(Just In Time,即时编译技术)和AOT(Ahead Of Time,预编译技术)

JIT:javac将java源码变为class字节码,逐条解释class,翻译成对应的机器指令,逐条解释翻译,必然比C/C++编译后的可执行二进制字节码程序慢,就出现了JIT,**JIT运行时分析应用程序的代码,**识别热方法,热方法会被JIT编译器编译成对应的汇编代码,存储到代码缓存中,以后调用不用解释执行了

AOT:编译器在编译时直接将程序源码编译成目标机器码,运行时直接运行机器码。

Dalvik虚拟机执行的是dex字节码,ART虚拟机执行的是本地机器码

Dalvik执行的是dex字节码,依靠JIT编译器解释执行,运行时动态地将执行频率很高的dex字节码翻译成本地机器码,然后在执行,但这个过程发生在应用程序的运行过程中,应用程序每一次重新运行的时候,都要重新做这个翻译工作

ART:安装应用的时候,dex中的字节码将被编译成本地机器码,之后每次打开应用,执行的都是本地机器码。移除了运行时的解释执行,效率更高,启动更快。

ART缺点 ①更大的存储空间占用,可能增加10%-20% ②更长的应用安装时间

ART是空间换时间

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档