美文网首页
Java内存区域与内存溢出异常(一)

Java内存区域与内存溢出异常(一)

作者: 不要戒酒 | 来源:发表于2018-06-19 23:32 被阅读0次

    运行时数据区域

    2、Java虚拟机栈(Java Virtual Machine Stacks)

        Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链表、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

        局部变量表存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它不等于对象本身,可能是一个指向对象起始地址的引用指针,也可能是一个代表对象的句柄或其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)。

        其中64位长度的long和double类型的数据会占用2个局部变量空间(Slot),其余的数据类型只占用1个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈中分配多大的局部变量表空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

        如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,如果扩张时无法申请到足够的内存,就会抛出OutOfMemoryError异常。

    相关文章

      网友评论

          本文标题:Java内存区域与内存溢出异常(一)

          本文链接:https://www.haomeiwen.com/subject/jwozeftx.html