一.类加载器
二.运行时数据区
?JVM调优主要就是优化堆 和 方法区
1.方法区: 静态变量、常量、类信息、运行时常量池
2.Java堆:我们的类的实例就放在这个区域,可以想象你的一个系统会产生很多实例,因此java堆的空间也是最大的。如果java堆空间不足了,程序会抛出OutOfMemoryError。
3.虚拟机栈:
A.它的生命周期与线程相同,所以对于栈来说不存在垃圾回收问题。一个线程对应一个java栈,每执行一个方法就会往栈中压入一个元素,这个元素叫“栈帧”。
B.栈帧中主要保存3类数据:
本地变量(Local Variables):输入参数和输出参数以及方法内的变量;
栈操作(Operand Stack):记录出栈、入栈的操作;
栈帧数据(Frame Data):包括类文件、方法等等,注意不是类信息
C.如果java栈空间不足了,程序会抛出StackOverflowError异常,这也是为什么递归会抛StackOverflowError,因为递归会调用大量方法
D.每个帧代表一个方法,Java方法有两种返回方式,return和抛出异常,两种方式都会导致该方法对应的帧出栈和释放内存。
E. 用来存放基本类型的变量和对象的引用变量
4.本地方法栈: 用来表示执行本地方法的,本地方法栈存放的方法调用本地方法接口,最终调用本地方法库,实现与操作系统、硬件交互的目的
5.程序寄存器(PC):程序该怎么执行,哪个方法先执行,哪个方法后执行,指令执行的顺序
三.执行引擎
1.执行引擎:根据PC寄存器调配的指令顺序,依次执行程序指令
2.垃圾回收
https://blog.csdn.net/weixin_45097458/article/details/100059635