当前位置: 移动技术网 > 科技>办公>内存 > JVM内存结构

JVM内存结构

2020年11月19日  | 移动技术网科技  | 我要评论
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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网