虚拟机与模拟器的区别和联系

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

虚拟机通常只VMware、Microsoft Virtual PC等工具,可以用他们来模拟PC,你可以在虚拟机里面装上Windows XP来研究各种病毒而不必担心会感染真正的系统,也常用来学习Linux。虚拟机的硬盘在你真正的系统上是一个或者几个文件,备份还原转移都很方便。

模拟器通常指模拟以前的游戏机的程序,用它们可以玩很多以前经典的游戏,比如红白机模拟器、PS模拟器、GBA模拟器,这样我们就可以在电脑上玩一些经典的游戏了。比如街霸啊超级玛丽啊拳皇啊合金弹头啊宠物小精灵之类的

从本质上讲,虚拟机和模拟器没有区别,他们都是用PC的CPU内存和硬盘空间来模拟出一个新的环境,只是他们模拟的环境不一样而已。在实际的使用中,因为模拟器仅仅用于玩游戏,而虚拟机可以很方便的让你在一个Windows XP中体验诸多其它的系统,所以很多人就觉得虚拟机比模拟器强大。殊不知模拟一个PS2/PSP的环境比模拟一个XP难上千倍,因为要模拟出不同架构的环境,虚拟的效率极低,目前的电脑尚达不到性能上的要求。

上面对虚拟机的各个部分进行了比较详细的说明,下面通过一个具体的例

子来分析它的运行过程。

虚拟机通过调用某个指定类的方法main启动,传递给main一个字符

串数组参数,使指定的类被装载,同时链接该类所使用的其它的类型,并

且初始化它们。例如对于程序:

public class HelloApp {

public static void main(String[] args){

System.out.println("Hello World!");

for (int i = 0; i < args.length; i++ ) {

System.out.println(args);

}

}

}

编译后在命令行模式下键入:java HelloApp run virtual machine

将通过调用HelloApp的方法main来启动java虚拟机,传递给main

一个包含三个字符串"run"、"virtual"、"machine"的数组。现在我们略述虚

拟机在执行HelloApp时可能采取的步骤。

开始试图执行类HelloApp的main方法,发现该类并没有被装载,也

就是说虚拟机当前不包含该类的二进制代表,于是虚拟机使用ClassLoader

试图寻找这样的二进制代表。如果这个进程失败,则抛出一个异常。类被

装载后同时在main方法被调用之前,必须对类HelloApp与其它类型进行

链接然后初始化。链接包含三个阶段:检验,准备和解析。检验检查被装

载的主类的符号和语义,准备则创建类或接口的静态域以及把这些域初始

化为标准的默认值,解析负责检查主类对其它类或接口的符号引用,在这

一步它是可选的。类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。一个类在初始化之前它的父类必须被初始化。

相关文档
最新文档