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

本文探讨了Dalvik虚拟机与传统Java虚拟机的主要区别,包括基于寄存器与基于栈的设计理念、DEX与Class文件的执行差异以及Android应用如何在独立的Dalvik实例中运行。

首先你必须对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更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值