JVM 运行时数据区域

一、程序计数器

可以看成当前线程执行的字节码的行号指示器。

如果当前线程正在执行Java方法,指向的是正在执行的虚拟机字节码指令的地址。如果正在执行的是Native方法,其值为空。

此内存区域不存在OutOfMemoryError异常。

二、Java虚拟机栈

当前线程特有,周期与线程一致。

虚拟机栈是Java方法执行的内存模型,每个方法执行的同时会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。方法执行对应着栈帧从虚拟机栈入栈到出栈的过程。

三、本地方法栈

本地方法栈是为虚拟机使用到的本地方法(Native方法)服务的。

以上都是线程隔离的数据区


四、Java堆

被所有线程共享,存放对象实例。

五、方法区

被所有线程共享,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据。又称为”非堆”。

六、运行时常量池

运行时常量池是方法区的一部分。

常量池用于存放编译生成各种字面量和符合引用。在类加载后进入到运行时常量池中存放。

七、直接内存

虚拟机之外的内存,在NIO中,频繁使用的内存,使用DirectByteBuffer对象直接引用,减少Java对和直接内存之间的复制数据。

以上运行时数据区域使用下图来示意:

image

posted @ 2017-07-20 11:30  javabeginer  阅读(199)  评论(0编辑  收藏  举报