写点什么

JVM 调优简要思想及简单案例 - 老年代空间分配担保机制

作者:zarmnosaj
  • 2022 年 6 月 21 日
  • 本文字数:948 字

    阅读完需:约 3 分钟

也有一些特殊情况,比如说如果在新生代 GC 里面,发现 Eden 区,垃圾回收完之后,它有大批对象都是存活的,它可能那个内存对象大小已经大于了这个 serviver 2 区或者 serviver 1,他们两个都是一样的,大于了 serviver 2 区,那它也会直接到这个老年代里面去。

这是属于一个只是例外情况,下面具体说明一下:

老年代空间分配担保机制:

1. 在执行任何一次新生代 GC 之前,JVM 会先检查一下老年代可用的可用内存空间,是否大于新生代所有对象的总大小

2. 看老年代的内存大小,是否大于之前每一次新生代 GC 后进入老年代的对象的平均大小

3. 如果上面两个步骤都判断成功了,那么 JVM 会尝试尝试进行新生代 GC

1. 新生代 GC 后,剩余的存活对象的大小,可直接进入 Survivor 区

2. 新生代 GC 后,大于 Survivor 区可用空间大小,但是小于老年代可用空间大小,则直接进入老年代

3. 新生代 GC 过后,剩余的存活对象大小大于了 Survivor 区域可用空间,也大于了老年代可用空间,触发 FULL GC,对老年代和新生代进行垃圾回收。

1. FULL GC 后,老年代有空间存放剩余的存活对象,则存活对象进行老年代

2. FULL GC 后,老年代还是没有空间存放剩余存活对象,则发生内存溢出(OOM)

GC 的内存性能开销:

FULL GC>老年代 GC>新生代 GC

GC 性能开销由大到小是 FULL GC,其次是老年代 GC, 最小的是一个新生代 GC 。这地方没有把那个新生代 GC 分得很细,比如 通常说的 Mior GC 或者是 Young GC, 为了便于理解,没有引入其他概念。

有了这个这样一个内存性能开销的一个大小比例之后,那我们为了让性能达到最优,主要也尽量让这个智能开销大的 GC 尽量的少发生。比如说我们这个可以新生代的 GC 多发生一些。

然后一个一店区,两个 river 区,然后说他我们我们又继续我们又说了那个项的创建,和回收,是怎样进行的。会有一些异常的分配机制,它会直接进入老年代,它不会去进入这两个 surviver 群,然后说了这个 EC 的性能开销,然后这样有这样一些基础之后,我们下来就会去讲这什么情况下我们需要 M 调优?然后我们为什么需要接 M 调优?虽然有两个有还还有一些其他知识,比如说垃圾回收剂或者垃圾回收算法,这地方没有再去展开地讲,因为如果要讲的话,它其实 C 篇这是很大的内容,这可能一时半会也讲不完。就先有一个为了让大家有一个简单的印象或者概念,就先讲一个简要的简要思想。

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

zarmnosaj

关注

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

成都后端混子

评论

发布
暂无评论
JVM调优简要思想及简单案例-老年代空间分配担保机制_6月月更_zarmnosaj_InfoQ写作社区