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


程序使用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)想测试一下不熟悉的应用,安装在虚拟机里,彻底删除 。