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(老年代):用于存放长期运行的对象