首页 >> 大全

什么是虚拟机(什么是虚拟机技术)

2023-04-28 大全 85 作者:考证青年

今天给大家分享一下什么是虚拟机的知识,解释一下什么是虚拟机技术。如果你碰巧解决了你现在面临的问题,别忘了关注这个网站,现在就开始!

什么是虚拟机?

什么是虚拟机?

虚拟机的概念比较宽泛。通常人们接触到的虚拟机的概念,包括这样的硬件模拟软件,以及JVM这样的介于硬件和编译器之间的软件。这里指的是后者。

虚拟机是一种抽象的计算机,它像真实的计算机一样,有一个指令集,并使用不同的存储区域。它负责执行指令和管理数据、内存和寄存器。这个虚拟机为任何平台上的编译器提供了一个公共接口。编译器只需要面对虚拟机,生成虚拟机能理解的代码,然后解释器把虚拟机代码转换成特定系统的机器码来执行。

java虚拟机

一、什么是Java虚拟机?

Java虚拟机是虚拟机的一种,是在实际计算机上通过软件模拟实现的。Java虚拟机有自己想象的硬件,比如处理器、堆栈、寄存器等等。,并且也有相应的指令系统。

1.为什么要使用Java虚拟机?

Java语言的一个很重要的特点就是与平台无关。使用Java虚拟机是实现这一功能的关键。如果一个通用的高级语言要在不同的平台上运行,至少需要编译成不同的目标代码。引入Java虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与特定平台相关的信息,使得Java语言编译器只需生成运行在Java虚拟机上的目标代码(字节码),无需修改即可运行在各种平台上。Java虚拟机在执行字节码时,将字节码解释为机器指令在特定平台上的执行。

2.谁需要了解Java虚拟机?

Java虚拟机是Java语言底层实现的基础,任何对Java语言感兴趣的人都应该对Java虚拟机有一个大致的了解。这有助于理解Java语言的一些特点,有助于使用Java语言。对于想要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者,以及想要用硬件芯片实现Java虚拟机的人员,都必须对Java虚拟机的规范有深入的了解。另外,如果你想扩展Java语言或者把其他语言编译成Java语言的字节码,你也需要对Java虚拟机有深入的了解。

3.Java虚拟机支持的数据类型。

Java虚拟机支持以下数据类型的Java语言:

Byte://1字节的有符号整数的补码。

Short://2/双字节有符号整数的补码

Int://4/4字节的有符号整数的补码

Long://8/8字节的有符号整数的补码。

Float://4字节单精度浮点数

://8字节双精度浮点数

Char://2字节无符号字符

几乎所有的Java类型检查都是在编译时完成的。上面列出的原始数据类型的数据在Java执行时不需要用硬件标记。操纵这些原始数据类型的字节码(指令)已经指示了操作数的数据类型。比如iadd、ladd、fadd、dadd指令都是两个数的加法,操作数类型是int、long、float、。虚拟机不会为布尔类型设置单独的指令。布尔数据由整数指令处理,包括整数返回。布尔数组用字节数组处理。虚拟机使用格式的浮点数。不支持IEEE格式的老电脑,运行Java数值计算程序可能会很慢。

虚拟机支持的其他数据类型包括:

//对 ()的4字节引用

//4字节,用于jsr/ret/jsr-w/ret-w指令。

注意:Java数组被视为对象。

虚拟机的规范对对象的内部结构没有特殊要求。在Sun公司的实现中,对对象的引用是一个句柄,句柄中包含一对指针:一个指针指向对象的* * *面,另一个指向对象的数据。Java虚拟机的字节码表示的程序应该符合类型规则。Java虚拟机的实现应该拒绝执行违反类型规定的字节码程序。由于字节码定义的限制,Java虚拟机似乎只能运行在32位地址空的机器上。但是您可以创建一个Java虚拟机,并自动将字节码转换为64位格式。从Java虚拟机支持的数据类型可以看出,Java严格规定了数据类型的内部格式,使得在各种Java虚拟机的实现中对数据的解释一致,从而保证了Java的并行性和兼容性。

便携性。

二、Java虚拟机架构

Java虚拟机由五部分组成:一组指令集、一组寄存器、一个堆栈、一个垃圾收集堆和一个* * *区。这五个部分是Java虚拟机的逻辑组成部分,不依赖于任何实现技术或组织,但它们的功能必须以某种方式在真机上实现。

1.Java指令集

Java虚拟机支持大约248个字节码。每个字节码执行一个基本的CPU操作,比如向寄存器中添加一个整数,子例程转移等。Java指令集相当于Java程序的汇编语言。

Java指令集中的指令包含一个单字节运算符来指定要执行的操作,以及零个或多个操作数来提供操作所需的参数或数据。许多指令没有操作数,只包含一个单字节运算符。

虚拟机内部循环的执行过程如下:

做{

取一个操作符字节;

根据操作符的值执行操作;

}while(程序未完成)

由于指令系统的简单性,虚拟机的执行过程非常简单,有利于提高执行效率。指令中操作数的数量和大小由运算符决定。如果操作数大于一个字节,它的存储顺序是高字节优先。例如,一个16位参数在存储时占用两个字节,其值为:

之一个字节*256+第二个字节字节码指令流通常是字节对齐的。例外情况是指令和,它们需要强制的4字节边界对齐。

注册

Java虚拟机的寄存器用来保存机器的运行状态,类似于微处理器中的一些特殊寄存器。

Java虚拟机有四种寄存器:

Pc:Java程序计数器。

Optop:指向操作数堆栈顶部的指针。

Frame:指向当前执行* * *的执行环境的指针。

Vars:指向当前正在执行的* * * *的局部变量区域的之一个变量的指针。

java虚拟机

Java虚拟机是堆叠的。它不定义或使用寄存器来传递或接受参数。其目的是保证指令集的简单性和实现的效率(特别是对于寄存器较少的处理器)。

所有寄存器都是32位的。

堆积

Java虚拟机的堆栈有三个区域:局部变量区、运行环境区和操作数区。

(1)局部变量区中的每个Java ***都使用一组固定大小的局部变量。它们根据vars寄存器的字偏移量进行寻址。局部变量都是32位的。长整数和双精度浮点数在两个局部变量之间占用空,但根据之一个局部变量的索引寻址。(例如,如果一个索引为n的局部变量是一个双精度浮点数,它实际上占用了索引n和n+1 空所表示的存储。虚拟机规范不要求局部变量中的64位值是64位对齐的。虚拟机提供将局部变量中的值加载到操作数堆栈中的指令,并且还提供将操作数堆栈中的值写入局部变量中的指令。

(2)运行环境区包含的信息用于动态链接、正常* * *返回和异常传播。

动态连接

运行时环境包括指向当前类和当前解释器符号表的指针,以支持* * *代码的动态链接。* * *的类文件代码在引用要调用的* * *和要访问的变量时使用符号。动态链接将符号* * *调用翻译成实际的* * *调用,加载必要的类来解释未定义的符号,并将变量访问翻译成与这些变量的运行时存储结构相对应的偏移地址。动态链接* * *和变量,使得* * *中使用的其他类的变化不会影响这个程序的代码。

正常* * *退货

如果当前* * *正常结束,当执行正确类型的返回指令时,被调用的* * *将获得返回值。执行环境用于在调用者正常返回时,恢复调用者的寄存器,并将调用者的程序计数器增加一个适当的值,跳过已执行的* * *调用指令,然后在调用者的执行环境中继续执行。

异常和错误传播

在Java中称为Error或,是类的子类。程序中的原因有:①动态链接错误,比如没有找到需要的类文件。②运行时错误,比如对空指针的引用。

程序使用throw语句。

当异常发生时,Java虚拟机采取以下措施:

检查与当前* * *关联的catch子句表。每个catch子句都包含其有效的指令范围、可以处理的异常类型以及处理异常的代码块的地址。

与异常匹配的catch子句应满足以下条件:导致异常的指令在其指令范围内,并且发生的异常类型是其可以处理的异常类型的子类型。如果找到匹配的catch子句,系统移动到指定的异常处理块执行;如果未找到异常处理块,则重复查找匹配catch子句的过程,直到检查完当前* * *的所有嵌套catch子句。

由于虚拟机从之一个匹配的catch子句开始继续执行,catch子句表中的顺序非常重要。因为Java代码是结构化的,所以* * *的所有异常处理程序总是可以按顺序排列在一个表中。对于任何可能的程序计数器值,您可以按线性顺序找到适当的异常处理块,以处理在程序计数器值下发生的异常。

如果没有找到匹配的catch子句,当前* * *将得到一个“异常未被截获”的结果,并将其返回给当前* * *的调用方,就像异常刚刚发生在其调用方一样。如果在调用者中仍然没有找到相应的异常处理块,那么这个错误传播将继续。如果错误传播到顶层,系统将调用默认的异常处理块。

(3)操作数堆栈区的机器指令只从操作数堆栈中取出操作数,执行运算,并将结果返回堆栈。之所以选择堆栈结构,是因为它可以有效地模拟虚拟机在只有少量寄存器或非通用寄存器(如)的机器上的行为。操作数堆栈是32位。它用于向* * *传递参数和从* * *接收结果,也用于支持操作参数和保存操作结果。例如,iadd指令将两个整数相加。相加的两个整数应该是操作数堆栈顶部的两个字。这两个字被前一条指令压入堆栈。这两个整数将弹出堆栈,相加,并将结果推回操作数堆栈。

每种原始数据类型都有特殊的指令来对它们执行必要的操作。每个操作数在堆栈中都需要一个存储位置,除了long和类型需要两个位置。操作数只能由适合其类型的运算符进行运算。例如,按下两个int类型的数字并将其视为long类型的数字是非法的。在Sun的虚拟机实现中,这种限制是由字节码验证器强制执行的。然而,有一些操作(操作符dupe和swap)对运行时数据区进行操作,而不管它是什么类型。

4.垃圾收集堆

Java的堆是一个运行时数据区,类的实例(对象)从这里分配空。Java语言有收集无用单元的能力:它没有给程序员显式释放对象的能力。Java并没有指定具体的垃圾收集算法,可以根据系统的需求使用各种算法。

5.***地区

* * *区域类似于传统语言中的编译代码或Unix进程中的主体段。它保存* * *代码(编译的java代码)和符号表。在当前的Java实现中,* * *代码不包含在垃圾收集堆中,但计划在未来的版本中实现。每个类文件都包含Java类或Java接口的编译代码。可以说,类文件就是Java语言的执行代码文件。为了保证类文件的平 *** 立性,Java虚拟机规范中也详细描述了类文件的格式。具体可参考Sun的Java虚拟机规范。

什么是虚拟机?在电脑上安装虚拟机有什么好处?

1.虚拟机是指由软件模拟的,具有完整的硬件系统功能,在完全隔离的环境下运行的完整的计算机系统。

2.利益

(1)演示环境,可以安装方便各种例子。

(2)保证主机的快速运行,减少不必要的垃圾安装程序,偶尔使用的程序,或者虚拟机上运行的测试程序。

(3)避免每次重装银行等常用工具,不常用,保密性要求好。单一类型的字母在一个环境中独立运行。

(4)想测试一下不熟悉的应用,安装在虚拟机里,彻底删除。

(5)体验不同版本的操作系统,如Linux和Mac。

终端虚拟化因其大大降低的维护成本而受到追捧——比如可以减少空的占用,减少购买软硬件设备的费用,节约能源,降低维护成本。与实际终端设备相比,更具有性价比优势。但这些并不是教育行业和制造商对虚拟化技术情有独钟的唯一原因。另一方面,我们很少提到虚拟化技术可以大大提高系统的安全性。

3.虚拟系统通过生成一个全新的虚拟镜像来抓取现有的操作系统,这个虚拟镜像与真实的系统具有完全相同的功能。进入虚拟系统后,所有操作都在这个全新的独立虚拟系统中进行。可以独立安装运行软件,保存数据,有自己独立的桌面,对真实系统没有影响。有一个操作系统可以在现有系统和虚拟映像之间灵活切换。

4.虚拟系统与传统虚拟机( 、、、 pc)的区别在于,虚拟系统不会降低电脑的性能,启动虚拟系统不像启动系统那样需要时间,所以运行程序更加方便快捷。虚拟系统只能模拟与现有操作系统相同的环境,而虚拟机可以模拟其他种类的操作系统;而且虚拟机需要模拟底层硬件指令,所以应用的运行速度比虚拟系统慢很多。

什么是虚拟机?

虚拟机是指在完全隔离的环境下运行的完整的计算机系统,由软件模拟,具有完成硬件系统的功能。

在物理计算机上可以完成的事情也可以在虚拟机上实现。在计算机中创建虚拟机时,需要拿出物理机的一部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像操作物理机一样操作虚拟机。

虚拟机的主要用途

1.演示环境,可以方便的安装各种例子。

2.保证主机的快速运行,减少不必要的垃圾安装程序、偶尔使用的程序或用于在虚拟机上测试运行的程序。

3.避免重新安装常用工具,如银行,不常用,要求保密性好,单独在一个环境下运行。

4.想测试一下不熟悉的应用,安装在虚拟机里,彻底删除。

5.体验不同版本的操作系统,比如Linux和Mac。

虚拟机是什么意思?

虚拟机是指一个完整的计算机系统,具有完整的硬件系统功能,运行在完全隔离的环境中,由soft sail组件模拟。

在物理计算机上可以完成的事情也可以在虚拟机上实现。在计算机中创建虚拟机时,需要拿出物理机的一部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像操作物理机一样操作虚拟机。

虚拟系统

通过生成现有操作系统的全新虚拟映像,虚拟系统具有与真实系统完全相同的功能。进入虚拟系统后,所有操作都在一个全新的独立虚拟系统中进行,软件可以独立安装运行。

保存数据,拥有自己独立的桌面,对真实系统不会有任何影响,而且它有一个可以在现有系统和虚拟镜像之间灵活切换的操作系统。

关于虚拟机的介绍到此为止。感谢您花时间阅读本网站的内容。不要忘记搜索该网站以获得关于虚拟机技术和虚拟机的更多信息。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了