java虚拟机的内存分为五大块 程序计数器 java虚拟机栈 本地方法栈 堆 方法区
一 :程序计数器:
1 是一块较小的内存,可以看做当前线程所执行字节码的行号指示器。
2 在多线程中每一个线程都应该有一个独立的程序计数器
3 如果是一个java方法,计数器记录的是正在执行的虚拟机的字节码指令地址,native方法,则计数器值为空
4 唯一一个java虚拟机中没有规定outofMemoryError
二:Java虚拟机栈:
1 线程私有的,描述的是java方法执行的内存模型
2 每个方法执行的时候都会创建栈帧,用于存储局部变量,操作数栈,动态链接,方法接口等
3 就是我们平时说的栈内存
4 线程请求的栈深度大于虚拟机所允许的深度,就发生stackoverflowError,如果无法申请到足够的内存内存 outofMemoryError
三 :本地方法栈:
与虚拟机栈的区别及时,虚拟机栈为java方法服务,本地方法栈为native方法服务
四:堆(GC堆)
1 内存中最大的一块,被所有线程所共享的一块区域,此内存唯一的目的及时存放对象实例
2 -Xmx -Xms
3 堆内存无法扩展的时候会抛出outofmemoryError
五:方法区:
1 与堆一样是线程的共享区域
2 存储被虚拟机加载的类信息,常量,静态变量
3 当方法区无法满足内存分配的时候将抛出outofMemoryError