JVM的基本结构
对于PC寄存器有个注意点,当执行本地方法时,pc的值为undefined
方法区
保存类的信息
java堆
对象保存在堆中,new 出来的,是gc的主要工作区间
java栈
栈由一系列帧组成,栈只进行帧的入栈出栈操作
栈保存一个方法的局部变量,操作数栈,常量指针
每一次的方法调用都进行一次要栈操作
局部变量表包含参数和局部变量
注意:非static方法的局部变量表有一个指向所在类的引用
栈上分配
对于堆上分配,每次都需要清理空间,栈上分配函数调用完成自动清理
所以有时间为了优化,会将本应该分配在堆上的对象分配在栈上,但是必须注意,栈的空间比较小
栈、堆、方法区交互
1个线程会有两个内存区,本地内存和主内存,本地内存是私有的,主内存是全局的,volatile关键词是用来解决本地内存与主内存不一致的。voatile关键字修饰的变量直接与主存打交道
volatile关键字