1, PC寄存器
每个线程拥有一个PC寄存器
在线程创建时创建
指向下一条指令的地址
执行本地方法时,PC的值为undefined
2,方法区
保存装载的类信息
类型的常量池
字段,方法信息
方法字节码
通常和永久区关联在一起
* JDK 6时,String 等常量信息置于方法区,JDK7时,已经移到了 堆
3,JAVA堆
和程序开发密切相关
应用系统对象都保存在堆中
所有线程共享JAVA堆
对分代GC来说,堆也是分代的
GC 的主要工作区间
|————————————————- |
| eden | s0 | s1 | tenured |
|___________________________|
4, JAVA 栈
线程私有的
栈由一系列帧组成(JAVA 栈也叫帧栈)
帧保存一个方法的局部变量,操作数栈,常量池指针
每一次方法调用创建一个帧,并压栈
局部变量在栈上分配,栈上分配不可能出现内存泄漏
java 中的栈上分配
逃逸指的是 栈是线程私有的, 是否能被其他的线程引用
Java 的内存模型
可见性
重排序
指令重排