JVM之内存模型介绍

JVM内存模型分类

JVM运行时内存主要分为线程共享内存和线程私有内存。线程共享内存分为堆内存、方法区(直接内存);线程私有内存分为线程栈、本地方法栈、程序计数器。
JVM之内存模型介绍_第1张图片

堆内存

使用new关键字创建的对象会分配在堆区(不考虑对象逃逸分析的情况下),堆区内存分为年轻代(默认占比2/3)和老年代(默认占比1/3)。

  • 默认新创建的对象会分配在Eden区,当Eden区放满后执行Minor GC
  • Minor GC后Servivor的对象会放入From区,再次触发Minor GC后会回收Eden区和From区
  • Minor GC后Servivor的对象会放入To区,放不下的话放Old区
  • 再次触发Minor GC后会回收Eden区和To区,Minor GC后Servivor的对象会放入From区
  • 依次循环,每经历一次Minor GC,分代年龄会+1
  • 分代年龄到达15后对象还未回收,对象会到老年代区
  • 老年代区放满后会执行Full GC,回收所有堆内存中的垃圾对象

方法区

主要存储class对象的类元信息、常量池、对象方法信息、类的静态变量

程序计数器

存放下一行指令码的行号(线程私有),是唯一不会发生OOM错误的内存空间。

本地方法栈

是native方法栈,使用C++实现。

线程栈

为每个方法生成方法栈帧,采用FILO的方式进行数据的操作每个栈帧中有4个部分:局部变量表、操作数栈、动态链接、方法出口。

你可能感兴趣的:(JVM,java,jvm)