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更改。
然后你再了解下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更改。
相关文章推荐
- (Android)java虚拟机和Dalvik虚拟机的区别
- Android开发_Android的Dalvik虚拟机和标准Java虚拟机的区别
- (Android)java虚拟机和Dalvik虚拟机的区别
- Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别
- (Android)java虚拟机和Dalvik虚拟机的区别
- android虚拟机(Dalvik)和标准Java虚拟机(JVM)的区别
- Android(java)学习笔记156:Java虚拟机和Dalvik虚拟机的区别
- java虚拟机jvm和android虚拟机dalvik区别
- Android Dalvik虚拟机简述(与Java虚拟机的区别和简要的执行原理)
- (Android)java虚拟机和Dalvik虚拟机的区别
- Android软件安全与逆向分析——dalvik虚拟机与Java虚拟机的区别(带实例)
- Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别
- (Android)java虚拟机和Dalvik虚拟机的区别
- (Android)java虚拟机和Dalvik虚拟机的区别
- (Android)java虚拟机和Dalvik虚拟机的区别
- (Android)java虚拟机和Dalvik虚拟机的区别 .
- 05 java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)
- android开发的Dalvik虚拟机和JVM虚拟机的区别
- 【Android 】Dalvik虚拟机和JVM虚拟机的区别
- java虚拟机和Dalvik虚拟机的区别