在Android的体系框架中有一部分叫做Android Runtime,即Android运行时环境,这个环境包括了两个部分,一个是Android的核心类库,还有一个就是Dalvik虚拟机了。

Android之所以开发Dalvik虚拟机而不使用JAVA自带的JVM是出于以下两点考虑(个人认为,不代表广泛意义):

1.版权问题,如果使用JVM就涉及到了版权问题,所以google需要在JVM的基础上做一些改进,创造自己的虚拟机。

2.性能问题。当然jvm虚拟机对Java开发来说性能已经足够了,但是相对移动平台的特性,比如低内存,低电量等,就显得有些牵强了,所以为了优化虚拟机的工作效率,google开发了android自己的虚拟机。

如上图所示,jvm是吧.java文本编译成.class字节码文件,在执行java程序的时候,类加载器把需要的类全部加载到内存当中去。

上图展示的是把字节码文件载入到内存后的结构,每个Class文件被解析成了几部分,包括了Header(主要是jdk的版本等)、常量等。。。

有多少个类,就会在内存中产生多少个上图结构中的文件。

上图所示是dalvik虚拟机加载的类文件结构图。davik虚拟机把.java文件编译成.class文件,又把.class文件转换成.dex文件,dalvik来执行.dex文件。

实际上.dex文件就是把多个class文件中的常量、方法等放到一起。形成如上图所示的结构。

 

在架构上jvm是基于栈的架构,所以每次访问数据cpu都要到内存中取到数据。

而dalvik是基于寄存器的架构。寄存器是在cpu上的一块存储空间,cpu如果直接从寄存器上读取数据的话就会快很多。

更多相关文章

  1. Android(安卓)逆向apk程序的心得
  2. Android(安卓)渗透测试学习手册(三)Android(安卓)应用的逆向和审计
  3. 最新res索引讲解(drawable、layout、values等目录的分辨率和layou
  4. Android进程的内存管理分析
  5. Windows下的Android(安卓)SDK下载,2.2之前各个版本及Google API,文
  6. 谈谈android数据存储方式
  7. Android(安卓)系统权限之SuperSU 模拟器root
  8. Android(安卓)Building System 总结
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android release 签名大包出错
  2. Android启动模式之singleinstance的坑
  3. android 4.0以上横竖屏切换不销毁activit
  4. Android开发之adapter
  5. 【Android】 adb shell 下 setting 指令
  6. Android UI 与文本相关的控件
  7. Android HAL and JNI
  8. Android封装类似微信的顶部TitleBar弹出
  9. Android Studio 编译时dx.bat报outofmemo
  10. Android使用java的Math.Random获取随机色