前言
Jvm是java virtual machine的缩写,为了跨平台运行,所以才会有jvm。

JVM是一种用于计算设备的规范,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算功能来实现的。引入Java虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java使用虚拟机屏蔽了与具体平台相关的信息,使得Java编译程序只需生成Java虚拟机上运行的字节码就可以在多种平台上不加修改地运行。

结构
Java虚拟机本质上是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。
Java虚拟机主要包含五大模块:类装载器子系统、运行时数据区、执行引擎、本地方法接口和垃圾收集模块。

1.类加载子系统:符合文件结构就加载。至于是否能够运行是由执行引擎负责。
2.执行引擎:解释器,负责解释命令,交由操作系统执行。
3.本地库接口:融合不同语言为Java所用。
4.方法区:存储已经被加载的类的信息,常量,静态变量,即时编译器编译后的代码等数据,jdk8后也叫元数据区。
5.堆:存储Java对象,任何new字段分配的Java对象实例和数组,都被分配到堆上,jdk1.7之后,运行时常量池从方法区移到堆上。
6.虚拟机栈:虚拟机栈中执行每个方法的时候,都会创建一个栈桢用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
7.本地方法栈:与虚拟机类似,只不过虚拟机为Java服务,本地方法栈为虚拟机使用的native方法服务。
8.程序计数器:提示虚拟机下一条需要执行的字节码指令。例如:Java正在执行一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址。如果执行的是native方法,则记录的是undefined
9.局部变量表:存放编译期的8种基本数据类型和对象引用和字节码地址类型。

发表评论

邮箱地址不会被公开。