您的位置:首页 > 移动开发 > Android开发

Java虚拟机和Dalvik(android)虚拟机的区别

2017-07-04 16:38 393 查看
首先你必须对java虚拟机中常用的一款有深入的了解,比如Hotspot。

然后你再了解下android系统和Dalvik。

Dalvik 与 传统jvm的差别还是很大的,总结来说,我个人把其归纳为三大类:

(1).传统jvm是基于栈的,而Dalvik基于寄存器的。如果你了解Hotspot,你发现每一个方法对应栈帧,每一条指令都是基于栈的操作,基于栈,那么很多都是进栈和出栈的造作,那么造就了指令很多。基于寄存器就是数据直接存储在寄存器上,然后直接读取数据进行操作,没有数据创建之后的进栈操作和出栈操作。

(2)传统的jvm是执行class文件,而dalvik却是执行dex文件,在android应用打包的时候,实质上是依据dx工具将class文件打包成dex文件(是class文件的压缩),dex文件直接被dalvik加载。

(3).在android系统中,每一个app对应一个dalvik,一个应用,一个虚拟机实例,一个进程(所有android应用的线程都是对应一个linux线程,都运行在自己的沙盒中,不同的应用在不同的进程中运行。每个android dalvik应用程序都被赋予了一个独立的linux PID(app_*))。常量池已被修改为只使用32位的索引,以 简化解释器。dalvik的堆和栈的参数可以通过-Xms和-Xmx更改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: