欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

JVM内存结构

程序员文章站 2022-04-15 17:51:43
JVM内存区域JVM运行时数据区根据结构可以划分为线程共享和线程私有,根据结构主要划分为 堆、虚拟机栈、本地方法栈、方法区、程序计数器。1.堆堆是JVM上最大的内存区域,申请的几乎所有的对象都是在堆上,垃圾回收操作的主要对象就是堆(堆又分为新生代和老年代,新生代又分为分为Eden区和Survivor区,Survivor 划分为 From Survivor 和 To Survivor)2.虚拟机栈虚拟机栈每个线程私有,线程运行时会将每个方法都打包成一个栈帧,方法完成时出栈。栈帧又包括局部变量表(储存...

JVM内存区域

JVM运行时数据区根据结构可以划分为线程共享线程私有,根据结构主要划分为 虚拟机栈本地方法栈方法区程序计数器

1.堆

堆是JVM上最大的内存区域,申请的几乎所有的对象都是在堆上,垃圾回收操作的主要对象就是堆(堆又分为新生代和老年代,新生代又分为分为Eden区和Survivor区,Survivor 划分为 From Survivor 和 To Survivor)

2.虚拟机栈

虚拟机栈每个线程私有,线程运行时会将每个方法都打包成一个栈帧,方法完成时出栈。栈帧又包括局部变量表(储存局部变量,包括基本类型和对象的引用),操作数栈(存放方法的操作数),动态链接,**方法出口(包括正常出口、异常出口和返回地址)**等,

3.程序计数器

主要用来记录个线程执行字节码的地址的,如循环,跳转,异常,线程恢复等操作都需要依赖程序计数器。多线程轮流执行时,线程暂停需要程序计数器来记录当前的执行地址,每一个线程需要对应一个单独的程序计数器,因此属于线程私有。由于记录的是执行地址,因此不会发生OOM,当执行native方法时,需要操作系统层面的程序计数器,JVM程序计数器就无效。

4.本地方法栈

与虚拟机栈类似,执行的是本地方法(native方法),HotSpot虚拟机中虚拟机栈和本地方法栈是合二为一的。

5.方法区

该区域是线程共享区域,主要储存类的结构信息,常量和静态变量

直接内存

直接内存也叫做堆外内存,不属于JVM运行时数据区的一部分,因此垃圾回收需要手动进行,该对象包含在堆中,包含了堆外内存的直接引用,可以通过XX:MaxDirectMemorySize设置内存大小,主要通过DirectByteBuffer申请内存,可以通过JNI或者Unsafe来调用。

本文地址:https://blog.csdn.net/weixin_44792480/article/details/109825739

相关标签: jvm