虚拟机相关

  • 虚拟机是什么, JVM,Dalvik,Art三者的区别
    • JVM和Android虚拟机的区别
      • 虚拟栈和寄存器
      • 基于虚拟栈和寄存器的程序都是怎么运行的
      • class与dex结构
    • Dalvik虚拟机和Art虚拟机的区别

虚拟机是什么, JVM,Dalvik,Art三者的区别

JVM和Android虚拟机的区别

  1. JVM虚拟机执的是.class文件,Android虚拟机执行的是.dex文件
  2. class文件存在很多冗余信息,dex会去除冗余信息
    一个class文件是一个类,一个dex文件里有很多类,减少加载次数和IO操作
  3. JVM虚拟机执行的是基于虚拟栈的虚拟机,Android虚拟机是基于寄存器的虚拟机

虚拟栈和寄存器

  1. Java虚拟机都是基于栈的结构,而Dalvik虚拟机则是基于寄存器。
  2. 基于栈的指令很紧凑,Java虚拟机使用的指令只占一个字节,因而称为字节码。
  3. 基于寄存器的指令由于需要指定源地址和目标地址,因此需要占用更多的指令空间。Dalvik虚拟机的某些指令需要占用2-3个字节。
  4. 基于栈和基于寄存器的指令集各有优劣,一般而言,执行同样的功能,基于栈的需要更多的指令(主要是load和store指令),而基于寄存器需要更多的指令空间。栈需要更多指令意味着要多占用CPU时间,寄存器需要更多指令空间意味着数据缓冲(d-cache)更易失效

基于虚拟栈和寄存器的程序都是怎么运行的

虚拟栈:通过const、store、load等指令,声明变量压入栈顶、存放到本地变量表中、从本地变量表中取回到栈顶进行操作等一连串指令运行程序,基于虚拟栈的程序没有变量引用的概念,指令多(需要更多的load和store指令)但是精简,消耗内存大,运行速度快
寄存器:指令少,但是每个指令比较大,因为指令中包含了变量的内存地址,所以通常需要2-3字节来表示变量

字节码指令查询地址

字节码指令没有地址
arm指令含有地址

class与dex结构


jar文件里边有很多class文件,每个class文件都是一个java类
dex文件里边是很多数据类型的列表,将打包到dex中的所有java类中的变量、方法等,根据不同类型,放到了对应的列表中

  1. dex文件减少了整体文件尺寸,dex更像是一种压缩文件,一次可以表示更多的class,jar是将n个class放在了一起
  2. Android虚拟机加载时,加载一个dex会加载很多类,class每次只加载一个
  3. dex指令更加密集,class指令比较多
  4. dex寄存器设计时方便寻址,class需要多次load与store指令
  5. dex适合于移动设备,class适合PC大内存,单指令小的情况下快速执行

Dalvik虚拟机和Art虚拟机的区别

Dalvik使用JIT(Just in time)编译,Art使用AOT(Ahead of time)编译

Dalvik:每次应用在运行时,实时的将一部分dex字节码翻译成机器码,消耗内存少,占用更少的物理存储空间,但CPU消耗多,启动和运行速度慢
Art:在应用安装期间,将dex字节码翻译成机器码存储在设备中,优点是不需要即时编译,启动运行速度快,缺点是占用更大的存储空间

JVM虚拟机与Android虚拟机相关推荐

  1. Android 虚拟机进化史

    按时间顺序开始介绍吧 1. Dalvik or ART? 2. Android 诞生之初 --> 单纯的 Dalvik 2.1 Dalvik虚拟机概述 2.2 Dalvik虚拟机与Java虚拟机 ...

  2. Android 虚拟机技术为何至今依旧 “屹立不倒” ?

    前言 我从事 Android 也有些年头了,大多时候都在跟项目,写写业务代码,很少花时间去研究关于 Android 开发基础方面的东西,时至今日我却越发明白了底层逻辑和基础知识才是进阶更加高阶 And ...

  3. Android面试收集录13 Android虚拟机及编译过程

    一.什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  4. android虚拟机加载机制,Android虚拟机与类加载机制

    JVM与Dalvik Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例.Dalvik虚拟机实则也算是一个Java虚拟机,只不过它执行的不 ...

  5. android -------- java虚拟机和Dalvik虚拟机

    2019独角兽企业重金招聘Python工程师标准>>> java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体 ...

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

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

  7. 《深入解析Android 虚拟机》——导读

    ** 前言 ** Android虚拟机技术--Dalvik VM是通往Android高级开发的必备技术!为了让广大读者深入理解Android系统,不再停留在抽象的原理和概念之上,本书对Android虚 ...

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

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

  9. Android虚拟机是以哪种方式实现的,底层逻辑又是怎样的?

    前言 我进入 Androird 行业也有一段时间,目前负责项目开发方面的工作,难免会用到虚拟机实现代码运行,最近我也一直在思考,虚拟机是以哪种方式实现的,底层逻辑又是怎样的?于是在网上查阅了相关的资料 ...

  10. android 虚拟机介绍

    概述 Android4.4以上开始使用ART虚拟机,在此之前我们一直使用的Dalvik虚拟机,那么为什么Google突然换了Android运行的虚拟机呢?答案只有一个:ART虚拟机更优秀. 1. Da ...

最新文章

  1. 一天狂揽2000+星,微软面向初学者ML课程来了,完全免费
  2. 学好单片机能找什么工作?单片机好学吗?
  3. 中文自然语言处理数据集:ChineseNLPCorpus(附链接)
  4. [C++] C++风格的强制类型转换探讨
  5. android 怎么换行,android textview 怎么换行?
  6. DataFrame不同风格比较
  7. [Swift]LeetCode268. 缺失数字 | Missing Number
  8. java实现pop客户机程序_java客户机如何通过JEE服务器(如weblogic、jboss等)进行身份验证的概念...
  9. 继腾讯、阿里、字节、快手等后,京东、有赞又爆大裁员,个别部门比例或达40%!...
  10. innodb逻辑存储结构
  11. Vim 配置详解_wuyang
  12. python批量图片自动编码
  13. 杂记(梯度,散度,旋度)// kron函数 //numpy.clip()函数// if __name__ == '__main__'
  14. java 订单模块实现
  15. 【新手入门】deepfacelab的电脑配置要求
  16. JS 测试网络速度与网络延迟
  17. python如何画3个相切的圆_如何在几何画板中画出三个两两相切的圆
  18. jsp程序设计(一)-jsp入门
  19. win10中安装JDK8以及环境配置
  20. capl保存trace_CANoe常用操作(CANoe系列其一)

热门文章

  1. php strpos ctf,CTF php代码审计 strpos()函数漏洞 XXE漏洞xinclude()
  2. android项目银联支付
  3. Alphago进化史 漫画告诉你Zero为什么这么牛
  4. 【源码】regtools:离散不适定问题的分析与求解
  5. 山城虽寒、但物联却热,探访中移物联小记一笔……
  6. java中ArrayList(基础)
  7. 详解Linux运维工程师必备技能
  8. web前端开发之CSS
  9. 如何用html语言制作圆角矩形,webGL中圆角矩形的绘制
  10. 爱快iKuai 安装成功后运行提示程序运行中解决办法