2019独角兽企业重金招聘Python工程师标准>>>

java虚拟机

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。

Dalvik虚拟机

Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且 每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

DVM虚拟机Dalvik Virtual Machine,是安卓中使用的虚拟机。全部安卓程序都运行在安卓系统进程里。每一个进程相应着一个Dalvik虚拟机实例。

Dalvik和标准Java虚拟机(JVM)的区别

java虚拟机基于栈。

java虚拟机运行的是java字节码。

java类会被编译成一个或多个字节码.class文件,打包到.jar文件中,java虚拟机从相应的.class文件和.jar文件中获取相应的字节码

dalvik虚拟机是基于寄存器的

Dalvik虚拟机运行的是Dalvik字节码

java类被编译成.class文件后,会通过一个dx工具将所有的.class文件转换成一个.dex文件,然后dalvik虚拟机会从其中读取指令和数据

Dalvik和Java之间的另外一大区别就是运行环境——Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行。

dalvik虚拟机架构:

  

Android应用编译及运行流程:

java虚拟机与Dalvik虚拟机架构不同。java虚拟机基于栈架构。程序在运行时虚拟机需要频繁的从栈上读取或写入数据。这过程需要更多的指令分派与内存访问次数,会耗费不少CPU时间,对于像手机设备资源有限的设备来说,这是相当大的一笔开销。Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式快的多.

DalvikJava运行环境的区别

1:Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。

2:Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。

3:不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex

4:dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。

5:odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。

6:所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制

7:有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。

转载于:https://my.oschina.net/zhangqie/blog/1803111

android -------- java虚拟机和Dalvik虚拟机相关推荐

  1. Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别

    Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野.它对内存的高效使用,和在低速CPU上表现出的高性能,确实令 ...

  2. (Android)java虚拟机和Dalvik虚拟机的区别

    Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野.它对内存的高效使用,和在低速CPU上表现出的高性能,确实令 ...

  3. Java虚拟机和Dalvik虚拟机的区别

    java虚拟机和Dalvik虚拟机的区别 该文章是本人转载的,觉得写的不错,和大家分享一下 Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvi ...

  4. java dalvik_Java虚拟机和Dalvik虚拟机的区别

    java虚拟机和Dalvik虚拟机的区别: java虚拟机 Dalvik虚拟机 java虚拟机基于栈. 基于栈的机器必须使用指令来载入和操作栈上数据,所需指令更多更多 dalvik虚拟机是基于寄存器的 ...

  5. Android Dalvik虚拟机之Dalvik虚拟机的特点

    Google于2007年底正式发布了Android SDK,Dalvik虚拟机也第一次进入了人们的视野.它的作者是丹.伯恩斯坦(Dan Bornstein).Dalvik虚拟机作为Android平台的 ...

  6. dalvik虚拟机与Java区别_05 Android---java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)...

    大家好,我是森森 这节课我简单给大家介绍一下java虚拟机跟安卓系统虚拟机的区别.可能时间太晚了,有点不在状态,也有点紧张,大家见谅. 05java虚拟机跟dalvik虚拟机的区别 这篇文章重点写一写 ...

  7. JAVA虚拟机、Dalvik虚拟机和ART虚拟机

    从Android5.0开始废弃了Dalvik,全面推行ART. Dalvik与ART的区别 (1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行 ...

  8. Dalvik虚拟机与java虚拟机的区别

    1.Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable). 2.Java虚拟机将.java文件编译成字节码文件(.class ...

  9. android dalvik虚拟机,Android开发环境搭建之Dalvik虚拟机

    原标题:Android开发环境搭建之Dalvik虚拟机 由于大多数用户使用Java编写Android应用程序,一个显而易见的问题是:Android是否提供Java虚拟机?答案是没有,Android不提 ...

最新文章

  1. Exchange安装
  2. php 求数组合集,PHP数组排序函数合集 以及它们之间的联系分析
  3. VTK:图片之ImageMask
  4. 基层数字化治理困境如何破局?
  5. php csv 类,php csv操作类代码 - trim
  6. flex.css快速入门,极速布局
  7. 【服务端渲染】NuxtJS基础
  8. 【图像融合】主成分分析PCA
  9. 网络协议:关于TCP/IP,必须知道的十个知识点
  10. 从python的random函数说起
  11. 小甲鱼python二_小甲鱼python第二讲课后习题
  12. 苹果x和xs买哪个好_苹果12哪个颜色销量销售好 iPhone12哪个颜色好看
  13. 留学生如何搞定Extended Essay?
  14. Elasticsearch1.x 拼音分词实现全拼首字母中文混合搜索
  15. Linux驱动框架之misc类设备驱动框架
  16. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_Python编程常用技巧,你知道几个?...
  17. 【USACO 2020 January Silver】Berry Picking 题解
  18. 你在小时候玩过哪些「恶心」的游戏?
  19. win10下定时任务备份,bat脚本运行
  20. 【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?

热门文章

  1. react native 生成APK
  2. webstrom中的快捷键
  3. 优化混合云性能:数据管理技巧大公开
  4. 前端学习 -- 颜色
  5. MyISAM 和InnoDB 的区别.(存储,索引, 事务, 锁)
  6. [转] 更新Flash CS6发布设置的目标播放器版本
  7. 10 分钟上手 Vue 组件 Vue-Draggable
  8. iis8.5 php mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程
  9. android小闹钟课程设计,《小闹钟》教学设计
  10. android 根据时间获取周几_android 调用系统 calendars 如何获取一个指定日期的所有日程 event。...