JVM学习笔记
==
标签(空格分隔): jvm
学习笔记全部来自于《深入理解java虚拟机》总结
- jvm内存示意图
- 虚拟机栈(Java Virtual Machine Stacks):
为虚拟机执行java方法(字节码)服务
1. 局部变量表
2. 操作数栈
3. 动态链表
4. 方法出口
- 虚拟机栈主要储存各种基本数据类型,对象引用等(由局部变量表实现)
- 每个方法创建时都会创建一个栈帧(Stack Frame)
- 每个方法从调用到执行完成 <>栈帧的入栈到出栈
*异常*
- 如果线程请求的栈深度大于虚拟机所允许的深度,将会跑出StackFlowError(栈溢出)异常
- 如果扩展时无法申请到足够内存就会抛出OutOfMemoryError(内存溢出)异常
- 本地方法栈(Native Method Stack):
为虚拟机执行Native方法服务
异常与虚拟机栈一样
- Java堆(Java Heap)线程共享:
存放对象实例
GC堆
- 方法区(Method Area)线程共享:
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
异常
- 方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常。
- 运行时常量池(Runtime Constant Pool)
用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。