jvm内存区

来源:互联网 发布:linux查看硬件命令 编辑:程序博客网 时间:2024/05/31 18:59

Java虚拟机主要分成:方法区、虚拟机栈、本地方法栈、堆、程序计数器。

方法区:线程共享, 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也会存在这个常量池中。

虚拟机栈:即栈内存为java方法服务,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。虚拟机栈是线程私有的,它的生命周期与线程相同(新建new Thread、就绪runnable、运行running、死亡dead、阻塞blocked)。局部变量表里存储的是基本数据类型。

本地方法栈:与虚拟机栈相似,为native方法服务。

堆:Java堆是所有线程共享的一块内存。在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作。

程序计数器:内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数器完成。该内存区域是唯一一个java虚拟机规范没有规定任何OOM情况的区域。