Android虚拟机以及与JVM区别

安卓目前有两种虚拟机,Dalvik跟Art,Art是M之后才出的,Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格 式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
从 Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层(上层是运行时核心库)。
主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。当然这些大家都知道,下面来看看几个区别。

Dalvik跟 JVM区别

运行内容

dvm运行的是dalvik字节码,jvm运行java字节码。
Java程序经过编译,生成Java字节码保存在class文件中,Java虚拟机通过解码class文件中的内容来运行程序。而Dalvik虚拟机运行的是Dalvik字节码,所有的Dalvik字节码由Java字节码转换而来,并被打包到一个DEX可执行文件中。Dalvik虚拟机通过解释DEX文件来执行这些字节码。
也就是说,在生成字节码之后,两个虚拟机就各自有自己的想法了,jvm直接对class文件操作了,dvm其实简单来看也差不多,经过DX工具将class文件转换成Dalvik虚拟机可以执行的dex文件,生成的是dalvik字节码。

类结构

dx工具对Java类文件重新排列,消除在类文件中出现的所有冗余信息,避免虚拟机 在初始化时出现反复的文件加载与解析过程。
一般情况下,Java类文件中包含多个不同的方法签名,如果其他的类文件引用该类文件中的方法,方法签名也会被复制到其类文件中,也就是说,多个不同的类会同时包含相同的方法签名,同样地,大量的字符串常量在多个类文件中也被重复使用。
这些冗余信息会直接增加文件的体积,同时也会严重影响虚拟机解析文件的效率。消除其中的冗余信息,重新组合形成一个常量池,所有的类文件共享同一个常量池。由于dx工具对常量池的压缩,使 得相同的字符串,常量在DEX文件中只出现一次,从而减小了文件的体积。

架构

Java虚拟机基于栈架构,程序在运行时虚拟机需要频繁的从栈上读取或写入数据, 这个过程需要更多的指令分派与内存访问次数,会耗费不少CPU时间,对于像手机 设备资源有限的设备来说,这是相当大的一笔开销。Dalvik虚拟机基于寄存器架 构。数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式要快很多。

跟ART的区别

DVM依靠JIT运行时解析,ART在应用安装时就预编译字节码到机器语言,这一机制叫Ahead-Of-Time (AOT)编译,在移除解释代码这一过程 后,应用程序执行将更有效率,启动更快。

垃圾回收机制

首先介绍下dalvik的GC的过程.主要有有四个过程:

  1. 当gc被触发时候,其会去查找所有活动的对象,这个时候整个程序与虚拟机内部 的所有线程就会挂起,这样目的是在较少的堆栈里找到所引用的对象.需要注意 的是这个回收动作和应用程序非并发。
  2. gc对符合条件的对象进行标记
  3. gc对标记的对象进行回收
  4. 恢复所有线程的执行现场继续运行

dalvik这么做的好处是,当pause了之后,GC势必是相当快速的.但是如果出现GC频 繁并且内存吃紧势必会导致UI卡顿,掉帧.操作不流畅等。
后来ART改善了这种GC方式 , 主要的改善点在将其非并发过程改变成了部分并发. 还有就是对内存的重新分配管理。

当ART GC发生时:

  1. GC将会锁住Java堆,扫描并进行标记
  2. 标记完毕释放掉Java堆的锁,并且挂起所有线程 3. GC对标记的对象进行回收
  3. 恢复所有线程的执行现场继续运行
  4. 重复2-4直到结束

Dalvik内存管理特点是:内存碎片化严重,当然这也是标记清除算法带来的弊端,
ART的解决:在ART中,在单独的内存空间存放large Object。同时ART将不连续的物理内存块进行对齐.对齐了后内存碎片化就得到了很好的解 决。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容