Java虚拟机

学习来自尚硅谷宋红康JVM全套教程(详解java虚拟机)_哔哩哔哩_bilibili

https://moonshuo.cn/posts/31.html

Java虚拟机

我们目前的Java虚拟机都是基于HotSpot虚拟机,是市面上高性能虚拟机的代表作之一

image-20220708153809780

Java代码的执行流程

image-20220708155824686

JVM的架构模型

Java编译器的指令流基本上是一种基于栈的指令集架构,另外一个是基于寄存器指令集架构

image-20220708160744046

区别

栈式架构特点

  1. 设计和实现更加简单,适用于资源受限的系统
  2. 避开了寄存器分配难题,使用零地址指令方式分配,jvm仅仅有一个寄存器,而零地址则是表示没有存储数据或者操作的地址,只是设计到出栈进栈操作
  3. 指令流中的指令大部分是零地址,执行过程依赖于栈,编译器更加容易实现
  4. 不需要硬件支持,可移植性比较好

但是这样也会带来一些弊端,与寄存器结构相比,完成同样的操作,栈式架构的指令更加多

1
2
3
4
5
6
7
8
9
10
11
12
/**
* @author 21050
* @date 2022-07-08 16:12:48
* @description
*/
public class Test {
public static void main(String[] args) {
int i=2;
int j=1;
int x=i+j;
}
}

对这个文件进行反编译

image-20220708161654233

上述分别为写入2,存储到1,写入1存储到2,加载1,加载2,相加,结构存储到地址3,返回

但是对于其他的寄存器的计算流程

1
2
mov eax,1
add eax,2

JVM的生命周期