一步一步深入jvm(1)—jvm是什么及组成
java是半编译半解释语言
编译与解释是两个过程,编译是在编译器中,而解释在jvm中。
从图中java先由源文件(java文件)编译生成相应的字节码文件(class文件)。
调用时jvm装载相应的字节码文件,并通过字节码解释器解释为相应的机器指令,由操作系统执行生成相应的机器指令。
看到这里那jvm到底是什么,由什么构成。
什么是jvm。
jvm全称为Java Virtual Machine中文为Java虚拟机,是Java语言的运行环境,是运行所有Java程序的抽象计算机。它是在实际的计算机上抽象出来的计算机,拥有自己完善的硬件构建(处理器、堆栈、寄存器等),同时也具有相应的指令系统。
知道了jvm是什么,那jvm是怎么构成的,其实前面已经提到了,它具有处理器,堆栈,寄存器,及指令系统。其实对于实际jvm来说,各个厂家实现的方式具有一定的差异性(IBM与SUN在JVM实现就具有差异性),但都遵守jvm规范。现有的jvm体系结构如下。
英文
中文
从图中可以看出jvm包括两个子系统和两个组件:Class loader(类装载器) 子系统,Execution engine(执行引擎) 子系统;Runtime data area (运行时数据区域)组件, Native interface(本地接口)组件。
1:Class loader(类装载器) 子系统
Class loader(类装载器)作用是根据指定的包名、类名装载相应的class文件到内存即jvm中的Runtime data area (运行时数据区域)的Method Area(方法区)。整个过程中装载器只负责负责文件结构格式能被装载,并不负责能不能运行。
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:**类的静态变量的初始化Java代码和静态Java代码块。
2:Execution engine(执行引擎) 子系统
Execution engine(执行引擎)又称为解释器,将classes文件的指令解析成机器指令代码,并提交给操作系统执行。
3:Runtime data area (运行时数据区域)
Runtime data area (运行时数据区域)的核心,也称JVM中的内存,JVM运行程序时使用。详情见后续的文章。
4: Native interface(本地接口)
与native libraries交互,是与其他编程语言交互的接口,主要为C与C++之间的交互。
这里只是简单的介绍了jvm是什么及jvm的组成。
很多的内容来自于网上。
后续将讲述四部分类容!