Java内存区域

Posted wolf_lb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java内存区域相关的知识,希望对你有一定的参考价值。

Java运行时数据区域

Java虚拟机所管理的内存包括以下几个运行时数据区域,如下图:
技术分享图片

程序计数器

  程序计数器(Program Counter Register)是一块较小的内存区域,是当前线程执行的字节码的行号指示器。程序计数器是一块私有的内存区域,每个线程都有一个独立的程序计数器。如果线程正在执行的是一个Java方法,这个程序计数器记录的是正在执行的虚拟机字节码指令地址;如果正在执行的是Native方法,这个计数器值则为空(Undefined)。程序计数器所在的内存区域是唯一一个在Java虚拟机没有OOM(OutOfMemoryError)情况的区域。

Java虚拟机栈

  Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,生命周期与线程同步。虚拟机栈描述的是Java方法执行的内存模型:每个方法执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、动态链、方法出口等信息。每个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
  虚拟机栈内存区域会出现两种异常:
    1.当线程请求的栈深度大于虚拟机允许的深度,会抛出StackOverflowError异常;
    2.当改区域需要扩展时申请不到足够的内存,就会抛出OOM(OutOfMemoryErro)异常。





以上是关于Java内存区域的主要内容,如果未能解决你的问题,请参考以下文章

Java内存区域与内存溢出异常

Java内存区域

java虚拟机java内存区域与内存溢出异常

java内存模型,内存区域

Java内存区域与模拟内存区域异常

Java内存区域与内存溢出异常