JVM(一)---基本原理

1. 地位
JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM是无论如何也避开不了的。
2. 概念
JVM:Java Virtual Machine,java虚拟机
java程序的跨平台性特性主要是指字节码文件在任何具有java虚拟机的计算机或电子设备上运行,java虚拟机中的java解释器负责将字节码文件解释成为特定的机器码进行运行。
JVM是JRE的一部分。所以JVM是属于JRE的,现在我们安装JDK时也附带安装了JRE(也可以单独安装JRE)。
3. Java程序运行流程
这里写图片描述

java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转为不同平台的机器码,最终完成执行。
3. JVM基本结构
这里写图片描述

-内存空间
JVM内存空间包含:方法区,java堆,java栈,本地方法栈。
方法区是各个线程共享的区域,存放类信息,常量,静态变量。
java堆也是线程共享的区域,我们的类的实例就放在这个区域,可以想象一下一个系统会产生很多实例,因此java堆的空间也是最大的,如果java堆空间不足了,程序会抛出OutOfMemoryError异常。
java栈是每个线程私有的区域,它的生命周期与线程相同,一个线程对应一个java栈,每执行一个方法就会往栈中压入一个元素,这个元素叫“栈帧”,而栈帧中包括了方法中的局部变量、用于存放中间值的操作栈。这里面的细节很多。如果栈空间不足,程序会抛出StackOverflowerError异常,什么情况下会容易产生这个错误,递归,递归如果深度很深,则会执行大量的方法,方法越多java栈的占用空间越大。
本地方法栈角色和java栈类似,只不过它是用来表示执行本地方法的,本地方法栈存放的方法调用本地方法接口,最终调用本地方法库,实现与操作系统、硬件交互的目的。
PC寄存器,说到这里我们的类已经加载了,实例对象,方法,静态变量都去了自己该去的地方,那么问题来了,程序该怎么执行,哪个方法先执行,这些指令执行的顺序就是PC寄存器在管,它的作用就是控制程序指令的执行顺序。
执行引擎当然就是根据PC寄存器调配的指令顺序,一次执行程序指令。

猜你喜欢

转载自blog.csdn.net/qq_33628614/article/details/79496805