JVM内存区域模型:
线程私有的
程序计数器:程序计数器是一块较小的区域,可以看做是当前线程所执行的字节码的行号指示器,是Java虚拟机中唯一没有定义OutOfMemory异常的区域。
虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用的过程就对应一个栈帧在虚拟机栈中从入栈到出栈的过程。
Java虚拟机栈可能出现两种类型的异常:
1. 线程请求的栈深度大于虚拟机允许的栈深度,将抛出StackOverflowError。
2.虚拟机栈空间可以动态扩展,当动态扩展是无法申请到足够的空间时,抛出OutOfMemory异常。
本地方法栈:本地方法栈和虚拟机栈基本类似,只不过Java虚拟机栈执行的是Java代码(字节码),本地方法栈中执行的是本地方法的服务。本地方法栈中也会抛出StackOverflowError和OutOfMemory异常。
线程共享部分:
堆:堆是Java虚拟机所管理的内存中最大的一块。堆是所有线程共享的一块区域,在虚拟机启动时创建。堆的唯一目的是存放对象实例。
Java堆可以是物理上不连续的空间,只要逻辑上连续即可,主流的虚拟机都是按照可扩展的方式来实现的。如果当前对中没有内存完成对象实例的创建