当前位置:首页 > 虚拟机 > 正文

java虚拟机课程讲解


一、JAVA虚拟机是什么意思?Java虚拟机(JavaVirtualMachine,简称JVM)是​​一台想象中的计算机。从结构上看,它由六个部分组成:抽象指令集、寄存器组、类文件格式规范、堆栈、内存垃圾收集器和存储区域。指令集采用独立于平台集成的字节码形式。寄存器组包含程序计数器、堆栈指针、执行环境指针和变量指针。类文件也是平台无关的并返回操作结果。垃圾收集器收集不再使用的内存段,该存储区域用于存储字节码。JVM只规定了组件的功能和规格。虽然这些功能和规范是统一的,但没有规定这些组件的具体实现技术,即可以采用任何技术来实现。
Java引入了虚拟机的概念,在机器和编译器之间添加了一个抽象的虚拟机层。该虚拟机为任何平台上的编译器提供了通用接口。编译器只需要面向虚拟机,生成虚拟机可以理解的代码,然后解释器将虚拟机代码转换为特定系统的机器代码来执行。在Java中,这种虚拟机可理解的代码称为字节码(ByteCode)。它不面向任何特定处理器,而仅面向虚拟机。
各个平台的解释器不同,但实现的虚拟机是一样的。Java源程序经过编译器编译后成为字节码。字节码由虚拟机解释并执行。虚拟机将每个要执行的字节码发送给解释器,解释器将其翻译为特定机器上的机器。代码,然后在特定机器上运行它。
可以说,Java虚拟机是Java语言的基础。它是Java技术的重要组成部分。Java虚拟机是一种抽象计算机,它像真实计算机一样具有指令集并使用不同的存储区域。它负责执行指令并管理数据、内存和寄存器。Java解释器负责将字节码翻译成特定机器的机器码。Java是一种简单的语言。它使用很少的概念,并且大多数程序员都熟悉。如果您是一名程序员,掌握Java对您来说很容易。即使你没有学过任何编程语言,学习Java也比学习C++容易得多。
二、java虚拟机的运行过程

上面详细解释了虚拟机的不同部分。我们通过一个具体的例子来分析一下它的执行过程。
虚拟机的启动是通过调用指定类的main方法,向main传递一个字符串数组参数,从而加载指定的类,并绑定和初始化该类使用的其他类型。例如,对于程序:
publicclassHelloApp{
publicstaticvoidmain(String[]args){
n("HelloWorld!");
for(inti=0;i<;i++){
n(args);
}
}
}
编译后,输入行模式命令:javaHelloApprunvirtualmachine
Java虚拟机将通过调用HelloAppmain方法来启动,并向main传递一个包含“run”、“virtual”和“machine”三个字符串的数组。我们现在描述虚拟机在运行HelloApp时可以遵循的步骤。
我开始尝试运行HelloApp类的main方法,发现该类还没有被加载,意味着虚拟机当前不包含该类的二进制表示,因此虚拟机使用ClassLoader来尝试找到这样的二元代表。如果此过程失败,则会引发异常。一旦加载了类,在调用main方法之前,HelloApp类必须链接到其他类型,然后进行初始化。联络包括三个阶段:检查、准备和分析。该检查检查加载的主类的符号和语义。准备工作创建类或接口的静态字段,并将这些字段初始化为标准默认值。解析负责检查从主类到其他类或接口的符号引用。步骤,可选。初始化类就是执行类中声明的静态初始化函数和静态字段的初始化构造函数。在初始化一个类之前,必须先初始化其父类。整个流程如下: