一、JVM的组成
1. JVM由那些部分组成,运行流程是什么?

从图中可以看出 JVM 的主要组成部分
- ClassLoader(类加载器)
- Runtime Data Area(运行时数据区,内存分区)
- Execution Engine(执行引擎)
- Native Method Library(本地库接口)
运行流程:
- 类加载器(ClassLoader)把Java代码转换为字节码
- 运行时数据区(Runtime Data Area)把字节码加载到内存中,而字节码文件只是JVM的一套指令集规范,并不能直接交给底层系统去执行,而是有执行引擎运行
- 执行引擎(Execution Engine)将字节码翻译为底层系统指令,再交由CPU执行去执行,此时需要调用其他语言的本地库接口(Native Method Library)来
实现整个程序的功能。
JVM 运行时数据区
组成部分:堆、方法区、栈、本地方法栈、程序计数器
- 堆解决的是对象实例存储的问题,垃圾回收器管理的主要区域
- 方法区可以认为是堆的一部分,用于存储已被虚拟机加载的信息,常量、静
态变量、即时编译器编译后的代码。 - 栈解决的是程序运行的问题,栈里面存的是栈帧,栈帧里面存的是局部变量
表、操作数栈、动态链接、方法出口等信息。 - 本地方法栈与栈功能相同,本地方法栈执行的是本地方法,一个Java调用非
Java代码的接口。 - 程序计数器(PC寄存器)程序计数器中存放的是当前线程所执行的字节码的
行数。JVM工作时就是通过改变这个计数器的值来选取下一个需要执行的字节码
指令。
什么是程序计数器?
线程私有的。内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。
javap -verbose xx.class 打印堆栈大小,局部变量的数量和方法的参数。
