- JVM内存模型
-
栈:私有
- 局部变量区: 保存局部变量
- 操作数栈:用于计算的临时数据存储区
- 动态链接: 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用(相当于C语言中的指针,指向该方法在运行时常量池中的位置),持有这个引用是为了支持方法调用过程中的动态连接(Dynamic Linking)。
(栈帧中保存了一个引用,相当于C语言中的指针,指向该方法在运行时常量池中的位置。通过运行时常量池的符号引用(指向堆),完成将符号引用转化为直接引用。)
- 返回地址:该方法的返回地址 -
本地方法栈:私有
和java虚拟机栈很相似,区别在于它用于保存本地方法(调用C++等方法) 的栈帧 -
程序计数器:私有
保存当前运行指令的地址,相当于计算机组成原理里的PC寄存器 -
堆:共享
用于存放对。
新生代约1/3,老年代约2/3。小的对象放在新生代,大的对象一般放在老年代。From和to统称Survivor。
-
方法区:共享
保存了静态变量、常量、类信息(构造方法、接口定义)、运行时常量池,别名非堆。
运行时常量池:字符串,保存符号引用的堆里的内存地址。