JVM的组成结构
主要区域:
方法区:类定义信息和静态成员。
堆:主要用来存放数据(对象等)。
栈:控制指令的执行顺序;包括局部变量表;
计数器:服务于栈,记录指令的跳转;
本地方法栈:操作系统自带的方法(由其他语言实现),用于和一些底层的如操作系统或某些硬件交换信息;

图片.png
线程:(本质)从main方法入栈到调用各种函数入栈和出栈,最后main方法出栈的一个全过程。

图片.png
流程:
类信息加载到方法区;
if 类信息中包含静态信息
相应的静态信息将存储在方法区;
else
方法区只是加载了类信息作为模板,并没有实例化;
开始执行main方法,在栈中开始调用执行
调用某函数:函数入栈;
执行中:在栈中生成对应的局部变量表,根据花括号执行顺序作入栈出栈操作,同时指明变量控制域。
函数执行结束:函数出栈
句柄的位置
方法内部的句柄:存储在栈中;
方法外部:堆中;
静态的句柄:方法区中;
值的位置
八大基本类型的数据,句柄在哪里,值就在哪里;
引用类型的值全部都在堆里面。