jvm G1垃圾收集器有什么缺点?

发布于 2022-09-12 00:52:41 字数 47 浏览 29 评论 0

G1垃圾收集器是否适用于所有情况?相对于cms、parallel等有什么优缺点?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

属性 2022-09-19 00:52:41

首先要说明,没有一款垃圾收集器是完美无缺的,只能分场景选择最适合的垃圾收集器。由于 G1 和 CMS 相比其他收集器都有停顿时间短的特点,所以主要对比这两个收集器:

  • G1 优点:

    1. 停顿时间短;
    2. 用户可以指定最大停顿时间;
    3. 不会产生内存碎片:G1 的内存布局并不是固定大小以及固定数量的分代区域划分,而是把连续的Java堆划分为多个大小相等的独立区域 (Region),G1 从整体来看是基于“标记-整理”算法实现的收集器,但从局部 (两个Region 之间)上看又是基于“标记-复制”算法实现,不会像 CMS (“标记-清除”算法) 那样产生内存碎片。
  • G1 缺点:

    G1 需要记忆集 (具体来说是卡表)来记录新生代和老年代之间的引用关系,这种数据结构在 G1 中需要占用大量的内存,可能达到整个堆内存容量的 20% 甚至更多。而且 G1 中维护记忆集的成本较高,带来了更高的执行负载,影响效率。

按照《深入理解Java虚拟机》作者的说法,CMS 在小内存应用上的表现要优于 G1,而大内存应用上 G1 更有优势,大小内存的界限是6GB到8GB。

挽清梦 2022-09-19 00:52:41
  • G1特点:在满足短时间停顿的同时,达到一个高的吞吐量,适用于多核处理器,大内存的系统。
  • 短停顿时间且可控:

    • G1对内存进行分区,基于部分内存回收的新生代收集和混合收集。
  • 高吞吐量:

    • 优化GC工作,使其尽可能与Mutator并发工作;
    • 设计了新的并发标记线程,用于并发标记内存;
    • 设计了Refine线程并发处理分区之间的引用关系

以我浅薄的理解,G1已经基本能全面替代cms、parallel等回收器。而且可以同时满足两代回收。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文