第2章 认识JAVA虚拟机的基本结构
2.1 虚拟机的内存划分
- 垃圾回收系统既回收堆,也回收方法区和直接内存
- 直接内存其实是一块不受JVM管理的内存,但是收到计算机内存的限制
2.2 虚拟机参数
-Xmx:虚拟机最大可用内存
2.3 堆
新生对象在eden和s0或者s1,每一次垃圾回收幸存下来的对象会倒腾到另一个s区并且岁数增大,大到一定程度就放到老年代。
2.4 栈
栈对应线程私有内存,线程每次调用方法对应一个栈帧入栈,方法正常返回或者抛出异常对应栈帧出栈。
栈的深度决定函数调用的最大的次数,如果栈满了回在此区域发生OOM。
2.4.1 局部变量表
方法里的参数和局部变量存在于栈帧的局部变量表中。局部变量是GCRoots的重要组成部分,凡是被局部变量引用的对象都不可以回收。
2.4.2 操作数栈
字节码是一个面向栈的机器码
2.4.3 帧数据区
用来支持常量池解析。当方法需要使用常量池里的常量的时候,在帧数据区里存放指向该常量的指针。