侧边栏壁纸
博主头像
DJ's Blog博主等级

行动起来,活在当下

  • 累计撰写 133 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

【JVM】内存模型

Administrator
2022-04-04 / 0 评论 / 0 点赞 / 57 阅读 / 1785 字

【JVM】内存模型

堆(Heap)

一般Eden:S0:S1=8:1:1

对象创建流程

  • 一般情况下,新创建的对象都会被分配到Eden区,一些特殊的大的对象会直接分配到Old区。
  • 在同一个时间点上,S0和S1只能有一个区有数据,另外一个是空的。S0有数据,S1为空。
  • 一般Old区都是年龄比较大的对象,或者相对超过了某个阈值(Eden区无法存放)的对象。

对象生命周期理解

  • 我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。
  • 有一天Eden区中的人实在是太多了,我就被迫去了Survivor区的From区,自从去了Survivor区,我就开始漂了,有时候在 Survivor的From区,有时候在Survivor的To区,居无定所。
  • 直到我18岁的时候,爸爸说我成人了,该去社会上闯闯 了。 于是我就去了Old区那边,Old区里人很多,并且年龄都挺大的,我在这里也认识了很多人。在年老代里,我生活了20年(每次GC加一岁),然后被回收。

对象的GC过程

  • Eden区内存空间使用达到临界值,触发一次Minor GC,GC之后将存活的对象从Eden复制到Survivor的From区,然后清空Eden区中的这些对象。
  • 再次触发一次Minor GC,Eden区中所有存活的对象会被复制到To区,原来From区中对象的年龄+1,如果年龄达到之前设置好的年龄阈值,此时这些对象会被移动到Old区。这样Eden区和From区没有达到阈值的对象会被复制到To区。这时候From和To交换角色,之前的From变成了To ,之前的To变成了From。
  • Minor GC会一直重复这样的过程,直到To区被填满,然后会将所有对象复制到老年代中。
  • 触发一次Major GC,回收Old区中的对象,通常也会伴随着一次Minor GC
  • 触发一次Full GC,回收Young和Old区中的对象

非堆(Non-heap)

  • JDK>=8:Metaspace
  • JDK<8:Perm Space
0
jvm

评论区