JVM内存模型
- 虚拟机栈(线程私有)
- 堆(线程共享)
- 本地方法栈(线程私有)
- 方法区(线程共享)
- 程序计数器(线程私有)

JDK1.6时候,方法区由永久代实现,存在于JVM内存中,包括Class、ClassLoader、常量池(包含串池)。
JDK1.7之后,方法区由元空间实现,存在本地内存中,包括Class、ClassLoader、常量池(不包括串池),串池存在于堆中。
硬件内存模型
- CPU寄存器
- CPU缓存
- 内存(主存储器)

JMM内存模型
线程拥有的:虚拟机栈(私有)、程序计数器(私有)、堆(公有)。
如果局部变量是基本数据类型,存储在栈上,
如果局部变量是引用数据类型,其引用的地址存储在栈上,对象存在堆上,
无论是基本数据类型还是引用地址,都对其他线程不可见,即便是能传递,也只能传递副本,原数据不可见。

