Java内存区域

运行时数据区域

Java 运行时数据区域包含方法区,堆,虚拟机栈,本地方法栈和程序计数器,具体如下图:

02_java虚拟机运行时数据区.png

Java内存区域详解

程序计数器

程序技术器可以看作时当前线程所执行的字节码的行号指示器。

现在的服务器基本上都是多核的,在线程之间切换的时候,如果一个线程运行了一些脚本,然后线程再切回来的时候,就需要知道上次运行到了哪里,程序计数器就是用来计算行号的作用,Jvm 会在获取到的行号下面继续执行。

Java虚拟机栈

Java 虚拟机栈是线程私有的,生命周期和线程一样。

每个线程在调用方法的时候,都会创建一个栈帧。该栈帧用来存储局部变量表,操作数栈,动态链接和方法出口等相关信息。

本地方法栈

和虚拟机栈差不多,只不过是本地方法栈为虚拟机用到的 Native 方法服务。

Java堆

在 Java 中,有引用类型和基本类型一说,引用类型有数组和对象。

对象的实例和数组对应的数据都会存储在堆上,堆是共享的区域,所以这部分数据在 JVM 中不是线程安全的。这部分区域也是 JVM 虚拟机中占用空间最大的区域,也是垃圾收集器管理的主要区域。

方法区

方法区中存放与类相关的信息,常量,静态变量等相关数据。这部分数据也是线程共享的,不是线程安全的。