理解JVM模型

归纳

JVM运行时数据区能够划分为5部分,分别是:程序计数器、虚拟机栈、本地方法栈、堆、方法区java

程序计数器(Program Counter Register)

至关于当前线程所执行字节码的行号指示器。
程序计数器是线程隔离的。
程序计数器区域是以上五个区域中惟一一个不会报OutOfMemoryError的区域。数组

虚拟机栈(VM Stack)

每一个方法在执行时都会建立一个栈桢(存放局部变量表,操做数栈等),每一个方法的嗲欧勇和执行完成,就表明着栈桢在虚拟机栈中入栈和出栈的过程。简单地说,虚拟机栈就是为JVM执行java方法(字节码)的区域。
虚拟机栈是线程隔离的。
当线程请求的栈深度大于虚拟机栈的深度时,StackOverFlowError。
当虚拟机栈须要扩展且没法申请到足够内存时,OutOfMemoryError。线程

本地方法栈(Native Method Stack)

相似于虚拟机栈的解释,简单说本地方法栈就是为JVM提供Native方法服务。
Native方法:java程序调用非java语言实现的接口,好比底层的一些驱动硬件的接口,以C语言实现。对象

堆(Heap)

存放实例对象以及数组,可划分为Eden,From Survivor,To Survivor。在物理内容上能够是不连续的,堆是可扩展的(-xmm,-xms参数),当堆中无空间来为实例对象分配内存且堆没法扩展空间时,OutOfMemoryError。blog

方法区(Method Area)

存储JVM的类加载信息、常量、静态变量等,又称为Non-Heap,常量池也为方法区的一部分。


___接口

附上一张HotSpot模型图

相关文章
相关标签/搜索