JVM内存结构分析

JVM内存结构分析

1.JVM内存定义

Jvm是Java虚拟机,是提供Java代码运行的虚拟环境,每一个java程序运行时,都有自己的一个jvm

2.JVM组成

JVM有3大核心区域:

栈内存:线程私有,主要用于存放基本数据类型和对象的引用(变量)。通过-Xss文件配置参数

堆内存:线程共享,主要用于存放数组和对象的实例。通过-Xms和Xmn配置参数

方法区(永久代):线程共享,主要用于存放类信息、常量、静态变量。通过-XX:Permsize和-XX:MaxPersize配置参数

注意:ava8从Jvm中移除了PermGen,使用Metaspace(元空间)来代替永久代 Metaspace不存在Jvm中,而是存在本地内存中 配置元空间初始值和最大值参数: -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=64m

3.heap堆内存中线程运行机制

New generation(新生代):由eden、s0、s1组成

流程1,新创建的对象,首先放在新生代中的Eden区

流程2,当Eden区放满后,JVM会扫描Eden区,将仍然存活的对象转移到S0

流程3,转移完成后,会一次性把Eden区和S1清空、

流程4,后续创建的对象,继续放Eden区

流程5,当Eden区放满后,JVM会扫描Eden区+s0,将仍然存活的对象转移到S1

流程6,当Eden区放满后,JVM会扫描Eden区,将仍然存活的对象转移到S0

流程7,当某次转移的时候,发现s0或者s1空间不足,不能存放转移的数据,此时JVM会将存货的对象转移到老年代中

Old generation(老年代):用于存放长期运行的对象

posted @ 2023-06-27 17:08  常疯大虾  阅读(37)  评论(0编辑  收藏  举报