方法区
线程共享
用来储存类信息,常量,静态变量,即时编译器编译后的代码
OutOfMemoryError
堆
线程共享
最大的一块内存,用来存放对象实例,垃圾收集器的主要区域
OutOfMemoryError
虚拟机方法栈
线程私有
java方法执行的内存模型:每个方法执行的时候都会有一个栈帧用来存储局部变量表(基本数据类型,对象引用,returnAddrress),操作数栈,动态链接,方法出口,方法执行的过程就是一个栈帧从入栈到出栈的过程
局部变量表所需的空间在编译期间完成分配,在运行期不会改变局部变量表的大小。
StackOverFlowError和OutOfMemoryError
本地方法栈
线程私有
本地方法栈和虚拟机方法栈的功能几乎一样,执行native方法
程序计数器
线程私有
- 执行java方法时,记录正在执行的字节码的虚拟机字节指令的地址
- 执行本地方法(Native)时,为空(Undefined)
- 没有OutOfMemoryError
运行时常量池(元空间)
1.8是改为元空间,存放编译期生成的各种字面量和符号引用,直接引用
直接内存
受物理内存和从操作系统的限制
OutOfMemoryError
网友评论