在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如果直接从寄存器上读取数据的话就会快很多。

安卓java虚拟机_Android虚拟机与Java虚拟机 两种虚拟机的比较相关推荐

  1. VMware虚拟机直连物理网络的两种方式

    VMware虚拟机直连物理网络的两种方式 使用VMware构建虚拟机,通常虚拟机都使用NAT模式.这时,虚拟机有独立的网段.使用NAT模式,虚拟机之间数据都通过虚拟网络传输,不会影响实体机所在的实体网 ...

  2. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  3. 在java程序中定义的类有两种成员_java试题 急需答案 谢谢!!!

    三.填空(每小题2分,共10分)1.在Applet中,创建一个具有10行45列的多行文本区对象ta的语句为:2.创建一个标识有"关闭"字样的标签对象gb的语句为.3.方法是一种仅有 ...

  4. Java 解析Excel(xls、xlsx两种格式)

    Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...

  5. [转]DES加密 java与.net可以相互加密解密两种方法

    [转]原文地址:http://jumpman.javaeye.com/blog/605996 DES加密 java与.net可以相互加密解密两种方法 文章分类:Java编程 通过这个方法可以实现jav ...

  6. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  7. 关于虚拟机中对象访问定位的两种方式的一些思考

    前言 本文是在周志明老师经典作品<深入理解Java虚拟机>第二章第三节的基础上对句柄和直接指针两种对象访问方式的深入思考,有不准确的地方希望读者不吝赐教. JVM中访问对象的两种方式 1. ...

  8. Java调用Python脚本:轻松实现两种语言的互操作性

    Java和Python都是非常流行的编程语言,它们都有自己的优点,但也有自己的局限性.在编写应用程序时,我们可能需要使用两种语言来共同完成一项任务.在这种情况下,Java需要调用Python脚本来解决 ...

  9. java 文件写入 读取_JAVA文件的两种读取方法和三种写入方法

    在使用java对文件进行读写操作时,有多种方法可以使用,但不同的方法有不同的性能. 此文对常用的读写方法进行了整理,以备不时之需. 1.文件的读取 主要介绍两种常用的读取方法.按行读取和按字符块读取. ...

  10. mongodb java crud_MongoDB用Java,简单的CRUD操作,两种方法,附源码下载。

    两种不同的连接数据库的方式来操作. MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); 方法1: D ...

最新文章

  1. is_uploaded_file
  2. mysql直连1.执行语句_MySQL随笔01_一条SQL语句是如何执行的
  3. 什么是Marketing Cloud的ABM - Account-Based Marketing
  4. echarts的x轴数量固定_联轴器 多节膜片式夹紧螺丝固定型 DAAPC(对应LK5CWP)
  5. 阿诗玛的传说|阿诗玛民间故事
  6. react学习(47)----react中initialValue和value不能一起定义
  7. python列表超出索引_python列表的切片操作允许索引超出范围
  8. 如何在 Mac 上启用 root 用户或更改 root 密码
  9. 漫步最优化四十二——Partan法
  10. RN与Android原生交互
  11. 如何使用开源工具制作YouTube系列
  12. java office web apps_应用程序与 Office Web Apps 整合
  13. php 辅助函数,辅助函数 - Laravel 5.8 中文文档手册 - php中文网手册
  14. 如果要学习web前端,需要学习什么
  15. doxygen 无法生成图片_设计稿智能生成代码如何识别组件?Imgcook 3.0 解析
  16. 11th Iran Nationwide Internet Contest 解题报告
  17. 如何将python爬出来的数据保存_Python爬虫入门6 将爬回来的数据存到本地
  18. 2021年口碑超好旗舰:蓝牙耳机排行榜10强推荐
  19. 集美大学 - 2840 - 实验7-3 - 编程题
  20. 操作系统学习笔记(五)---进程同步

热门文章

  1. Screen Saver Exporter for Mac(屏幕保护程序导出程序)
  2. 程序设计导引及在线实践之麦森数
  3. 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验指导书(MATLAB版) 随书代码...
  4. 【Unity】NGUI下载与导入
  5. 壁式框架内力计算_钢结构墙梁内力计算
  6. Android SDK的下载与安装(包会)
  7. Android SDK官网下载网址
  8. 整理了一些已分类的产品Axure元件库,助力正在找Axure组件库的同学高速成长
  9. html无限弹窗关不掉,使用cmd命令时出现无限弹窗的故障如何终止
  10. 软考-网络工程师复习资料