美文网首页
Java运行时的数据区域及存在的异常

Java运行时的数据区域及存在的异常

作者: 我要扭开奥利奥 | 来源:发表于2019-04-01 23:00 被阅读0次

    开始学习Java虚拟机,记录一下学习过程

    程序计数器(Program Counter Register)

    程序计数器是当前线程所执行的字节码的行号指示器(完美世界校招笔试题中出现过该问题)。字节码解释器通过改变该计数器的值来选取下一条字节码指令。
    Java虚拟机的多线程是通过线程轮流切换并分配处理器执行的方式来实现的,在任何一个确定的时刻,一个处理器/内核都只会执行一条线程中的指令。为了保证线程切换之后能够恢复到正确的位置,每个线程都需要一个独立的程序计数器,各个线程之间的程序计数器互不影响。
    如果执行的方法为Java方法,那么该计数器中记录的是正在执行的虚拟机字节码指令位置,如果执行的是Native方法,这个计数器为空(Undefine)。该区域不会存在OutOfMemoryError错误。

    Java虚拟机栈(Java Virtual Machine Stacks)

    Java虚拟机栈也是线程私有的,生命周期和线程相同。虚拟机栈中存放的是栈帧(Stack Frame),栈帧里面存放着局部变量表、操作数栈、动态链接、方法出口等信息。一个方法的调用到执行完成就对应着相应的栈帧在虚拟机栈中入栈和出栈。
    在栈帧里面的局部变量表存放着编译期可知的基本数据类型(boolean,byte,char,short,int,float,long,double),对象引用和returnAddress。其中long和double占用两个局部变量空间(slot),其余的只占用一个。
    如果线程请求的栈深度大于虚拟机允许的深度,那么将抛出StackOverflowError异常;如果虚拟机支持动态扩展,在扩展的时候申请不到足够的内存,那么就会抛出OutOfMemeryError错误。

    本地方法栈(Native Method Stack)

    本地方法栈和虚拟机栈的作用相似,但是虚拟机栈为Java方法服务,本地方法栈为Native方法服务。有的虚拟机将本地方法栈和虚拟机栈合二为一。该栈可能会抛出StackOverflowErrorOutOfMemeryError

    Java堆(Java Heap)

    Java堆是所有线程共享的一块内存区域,其用于存放对象实例数组。Java堆是垃圾收集器管理的主要区域,把Java堆按照内存回收的角度可以划分为Eden空间From Survivor空间To Survivor空间等。从内存分配的角度看,线程共享的堆中可能分配出多个线程私有的分配缓冲区,通过内存划分,可以更好的回收或分配内存。
    Java堆可以处于物理上的不连续空间上,只需要逻辑连续即可。
    如果堆没有完成内存分配并且堆也无法扩展的时候,就抛出OutOfMemoryError异常。

    方法区(Method Area)

    方法区是各个线程共享的内存区域,其主要存储虚拟机加载的类信息、常量、静态变量,即时编译后的代码等数据。
    该区域的内存不需要物理连续的内存和可以选择固定大小或者扩展,也可以实现不是先垃圾收集。该区域的内存就收目标主要针对常量池的回收和堆类型的卸载。
    如果方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

    运行时常量池(Runtime Constant Pool)

    运行时常量池是方法区的一部分。class文件中一般装有类的版本、字段、方法、接口等描述信息,另外,还有一项信息是常量池,用于存放编译器生成的各种字面量符号引用。这部分内容在类加载后进入方法去区的运行时常量池中存放。
    运行时常量池相对于Class文件常量池的另外一个重要特征是具有动态性,Java语言不要求常量一定在编译期产生,运行期也可能将新的常量放入池中。
    运行时常量池是方法区的一部分,会受到方法区内存的限制,当常量池无法再申请到内存时会抛出OutOfMemoryError异常。

    直接内存(Direct Memory)

    直接内存并不是虚拟机内存的一部分,也不是Java虚拟机规范中定义的内存区域。
    本机直接内存的分配不会受到Java堆大小的限制,但是会受到本机总内存和处理器寻址空间的限制。在服务器管理员配置服务器时让各个内存区域大于物理内存限制的时候,会出现OutOfMemoryError异常。

    相关文章

      网友评论

          本文标题:Java运行时的数据区域及存在的异常

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