前言
今天开始JVM的学习,从JIVM的内存结构开始JVM之旅。
内存结构图
程序计数器:
容量:较小的内存空间
作用:当前线程所执行的行号指示器
说明:JAVA方法,则程序计数器的记录就是当前虚拟机字节码指令的地址。本地方法,则为空。
共享还是私有:线程私有,线程间互不影响
JAVA虚拟机栈:
作用:
每个方法在执行时会创建一个栈帧,一个方法的执行就是这个栈帧在虚拟机栈入栈出栈的过程。
说明:栈帧用于存储局部变量表、操作数栈、方法出口、动态链接
共享还是私有:线程私有
本地方法栈:
作用:
执行本地方法 native方法
共享还是私有:线程私有
堆
容量:jvm中容量最大的区域
作用:用于存放实例化对象和数组,GC的主要区域
共享还是私有:共享
说明:堆可以是空间上不连续但是逻辑上连续的区域。
方法区
作用:存储已被虚拟机加载的类信息、常量、静态变量
共享还是私有:共享
说明:常被称为非堆,在GC分代机制中被划入永久代
运行时常量池
作用:存储编译器字面值常量、符号引用,也可以在运行期放数据到常量池,常用于String的intern
共享还是私有:共享
说明:认为是方法区的一部分。在JDK8开始,这一块区域放在元空间。
直接内存
作用:常用于NIO操作,NIO后面在学习
说明:直接内存不属于JAVA虚拟机的内存结构,不属于JVM管控,称之为堆外内存。