基于栈和基于寄存器的虚拟机

电脑上内存不足时打开Android Studio 总会看到如下报错,也就是你的电脑内存不够跑一个虚拟机了,也说明虚拟机非常耗内存。今天来学习一下~

这里写图片描述

虚拟机的概念:

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。

JAVA虚拟机和安卓虚拟机

这里写图片描述

  • Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable)。
  • 在JavaSE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件,而后Java虚拟机会从相应的CLASS文件和JAR文
    件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,但是在编译成CLASS文件后,还会通过一个工具(dx)将应用所有的
    CLASS文件转换成一个DEX文件,而后Dalvik虚拟机会从其中读取指令和数据。

基于栈的虚拟机 Stack-based VM

一个基于Stack的虚拟机会通过IP来获取操作数,其操作数都是保存在Stack数据结构中,从栈中取出数据、计算然后再将结果存入栈中(LIFO,Last in first out)。每次访问CPU都要到内存中取数据。

基于寄存器的虚拟机 Register-based VM

基于寄存器的虚拟机,它们的操作数是存放在CPU的寄存器的。没有入栈和出栈的操作和概念。但是执行的指令就需要包含操作数的地址了,也就是说,指令必须明确的包含操作数的地址,这不像栈可以用栈指针去操作。
基于寄存器得虚拟机还有一个优点就是一些在基于Stack的虚拟机中无法实现的优化,比如,在代码中有一些相同的减法表达式,那么寄存器只需要计算一次,然后将结果保存,如果之后还有这种表达式需要计算就直接返回结果。这样就减少了重复计算所造成的开销。
当然,寄存器虚拟机也有一些问题,比如虚拟机的指令比Stack vm指令要长(因为Register指令包含了操作数地址)。
因为寄存器是CPU上的一块存储空间,CPU直接从寄存器上读取数据会快很多。

安卓应用编译及运行流程

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值