写点什么

JVM 调优简要思想及简单案例 -JVM 分代模型

作者:zarmnosaj
  • 2022 年 6 月 19 日
  • 本文字数:574 字

    阅读完需:约 2 分钟

前言

JVM 将 Java 堆内存划分为了两个区域,一个是年轻代,一个是老年代。年轻代里的对象,他们的特点是创建之后很快就会被回收。老年代里的对象,他们的特点是需要长期存在。



JVM 分代模型

大部分的正常对象,都是优先在新生代分配内存的。但是新生代也肯定是会有容量限制的,比如说有 1g、1.5g 或者 2g,如果新生代本来预先分配的内存空间,几乎被对象给占满了,此时假设我们代码继续运行,还需要在新生代里去分配一个对象,但发现新生代里内存空间都不够了,这个时候,就会触发一次新生代内存空间的垃圾回收。它会把新生代的这些垃圾对象然后进行一次垃圾回收,新生代随着系统的运行,进行这个垃圾回收之后新生代还会产生垃圾,然后再次回收掉一些不用的对象,然后保留的一些有用的对象,新生代的它那个空间就会变小下来,那可又又可以继续用了。


新生代可能随着系统的运行,不停的创建对象,然后让新生代变满,接着垃圾回收一次,大量对象被回收掉,但是某些对象,例如静态变量,是不会被回收掉的,会存活在新生代里的,不会被回收。这种情况 JVM 有一条规定:如果一个实例对象在新生代中,成功的在 15 次新生代垃圾回收之后,还是没被回收掉,就说明他已经 15 岁了,就会被转移到 Java 堆内存的老年代中去。


上面的情况不断发生,越来越多的对象进入老年代,一旦老年代也满了,也需要对老年代进行垃圾回收。对老年代的垃圾回收,我们称之为老年代 GC

发布于: 刚刚阅读数: 3
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020.02.06 加入

成都后端混子

评论

发布
暂无评论
JVM调优简要思想及简单案例-JVM分代模型_6月月更_zarmnosaj_InfoQ写作社区