资料内容:
1. JVM 运行时内存结构
1.由如下图构成。Runtime Data Area 有如下几个区,其中 PC 程序计数器、虚拟机栈
和本地方法栈是线程独享的,堆和方法区是线程共享的。Classload 用来加载 class 文
件,执行引擎用来执行程序,本地方法接口调用本地方法库。
2.java stack 比较简单,每一个都是一个栈帧,每个栈帧由三部分构成。局部变量区、
操作数区和帧数据区。局部变量是一个以数组形式管理的内存区,一般第 0 位是指向
自己的 this 引用;其他的都是基本数据类型和 reference 类型和 returnedAddress 类型。
操作数区不是通过索引来访问,通过入栈出栈来访问,是临时数据的存储区域,比方
说数学计算。帧数据区是保存一些指向常量池的指针,需要常量数据时就通过这个指
针来访问常量池数据。
3. 共享内存区:分为 permanent space、old space、From survivor、To survivor 和
Eden。其中 premanent 包括 runtime constant pool 和已加载的类信息和方法信息。
Old space(tenured generation)包含生命周期长的存活对象。From survivor 和 Eden
存放存活比较短的对象,To survivor 是用来复制保存存活的对象。