写点什么

JVM 调优简要思想及简单案例 - 对象的回收与保留

作者:zarmnosaj
  • 2022 年 6 月 18 日
  • 本文字数:661 字

    阅读完需:约 2 分钟

JVM 调优简要思想及简单案例-对象的回收与保留

前言

程序持续运行,不断产生新对象,那不再需要的那些对象应该怎么处理?


  • 答案是 JVM 的垃圾回收机制,将不再需要的对象进行回收


仍然需要的对象怎么处理?


  • 继续保留在 JVM 中

对象的回收与保留

假设存在仍然需要的对象,JVM 会怎么处理?


比如说我们可以理解为有一个全局变量类这样一个东西,例如 static 修饰的变量。JVM 内部会持续地保留这种对象,不会去进行一个回收。稍微提一下,其内部主要的实现原理是引用计数法,判断与 root 是否还存在引用,以及引用的次数。


JVM 的堆内存区域中,有一个分代模型,为了便于对象的创建分配空间,这个分代模型,也就是把 JVM 堆内存划分为了两个大区域。


一个区域我们称之为年轻代,另一片区域为老年代。如图所示:



年轻代和老年代一起构成了 JVM 中堆内存的主要组成部分,两者的特点:


  1. 年轻代:对象创建时主要的分部区域,存活时间短的对象会在这个区域中很快被回收掉

  2. 老年代:见字思意,老年代就是长期存在的对象所处的内存区域,当然,这里的长期存活,不是直接判断哪些对象会长期存活,哪些对象存活周期短暂而得来的,其中是经过 JVM 垃圾回收机制中的 GC 生存年龄判断得出的(之后会提到)。

总结

如果堆内存只有一片区域划分的话,每次垃圾回收的对象都是一整片内存区域,一个是回收效率低,另一个是内存的划分不合理,在回收掉无用对象后,会产生内存碎片,当内存碎片越来越多的时候,再想分配大对象也就不可能了。所以有了年轻代和老年代的划分,再接着这个描述可以想一想,内存区域还可以怎样划分?这样划分是否就是合理的?下一篇文章会对此问题进行解答。

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

zarmnosaj

关注

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

成都后端混子

评论

发布
暂无评论
JVM调优简要思想及简单案例-对象的回收与保留_6月月更_zarmnosaj_InfoQ写作社区