「译文」Java 垃圾收集参考手册(八):GC 算法总结

简介: 「译文」Java 垃圾收集参考手册(八):GC 算法总结

总结

通过本节内容的学习, 你应该对 G1 垃圾收集器有了一定了解。当然, 为了简洁, 我们省略了很多实现细节, 例如如何处理 巨无霸对象(humongous objects)。 综合来看, G1 是 HotSpot 中最先进的 ** 准产品级(production-ready)** 垃圾收集器。重要的是, HotSpot 工程师的主要精力都放在不断改进 G1 上面, 在新的 java 版本中, 将会带来新的功能和优化。

可以看到, G1 解决了 CMS 中的各种疑难问题, 包括暂停时间的可预测性, 并终结了堆内存的碎片化。对单业务延迟非常敏感的系统来说, 如果 CPU 资源不受限制, 那么 G1 可以说是 HotSpot 中最好的选择, 特别是在最新版本的 Java 虚拟机中。当然, 这种降低延迟的优化也不是没有代价的: 由于额外的写屏障 (write barriers) 和更积极的守护线程, G1 的开销会更大。所以, 如果系统属于吞吐量优先型的, 又或者 CPU 持续占用 100%, 而又不在乎单次 GC 的暂停时间, 那么 CMS 是更好的选择。

总之: G1 适合大内存, 需要低延迟的场景

选择正确的 GC 算法, 唯一可行的方式就是去尝试, 并找出不对劲的地方, 在下一章我们将给出一般指导原则。

注意,G1 可能会成为 Java 9 的默认 GC: http://openjdk.java.net/jeps/248

Shenandoah 的性能

译注: Shenandoah: 谢南多厄河; 情人渡, 水手谣; –> 此款 GC 暂时没有标准的中文译名; 翻译为大水手垃圾收集器?

我们列出了 HotSpot 中可用的所有 “准生产级” 算法。还有一种还在实验室中的算法, 称为 超低延迟垃圾收集器(Ultra-Low-Pause-Time Garbage Collector). 它的设计目标是管理大型的多核服务器上, 超大型的堆内存: 管理 100GB 及以上的堆容量, GC 暂停时间小于 10ms。 当然, 也是需要和吞吐量进行权衡的: 没有 GC 暂停的时候, 算法的实现对吞吐量的性能损失不能超过 10%

在新算法作为准产品级进行发布之前, 我们不准备去讨论具体的实现细节, 但它也构建在前面所提到的很多算法的基础上, 例如并发标记和增量收集。但其中有很多东西是不同的。它不再将堆内存划分成多个代, 而是只采用单个空间. 没错, Shenandoah 并不是一款分代垃圾收集器。这也就不再需要 card tables 和 remembered sets. 它还使用转发指针(forwarding pointers), 以及 Brooks 风格的读屏障(Brooks style read barrier), 以允许对存活对象的并发复制, 从而减少 GC 暂停的次数和时间。

关于 Shenandoah 的更多信息, 请参考博客: https://rkennke.wordpress.com/, JEP 文档: http://openjdk.java.net/jeps/189, 或者 Google 搜索 「Shenandoah GC」。

相关文章
|
4天前
|
监控 算法 Java
Java GC调优详解
Java GC调优详解
23 0
|
16天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
55 1
|
10天前
|
搜索推荐 Java
Java排序算法
Java排序算法
|
10天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
|
13天前
|
关系型数据库 Java 开发工具
Java入门高频考查基础知识9(15问万字参考答案)
本文探讨了Spring Cloud的工作原理,包括注册中心的心跳机制、服务发现机制,以及Eureka默认的负载均衡策略。同时,概述了Spring Boot中常用的注解及其实现方式,并深入讨论了Spring事务的注解、回滚条件、传播性和隔离级别。文章还介绍了MySQL的存储引擎及其区别,特别关注了InnoDB如何实现MySQL的事务处理。此外,本文还详细探讨了MySQL索引,包括B+树的原理和设计索引的方法。最后,比较了Git和SVN的区别,并介绍了Git命令的底层原理及流程。
26 0
Java入门高频考查基础知识9(15问万字参考答案)
|
13天前
|
存储 缓存 算法
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
45 0
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
|
13天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
31 0
|
16天前
|
XML 存储 算法
Java数据结构与算法-java数据结构与算法(五)
Java数据结构与算法-java数据结构与算法
47 0
|
3天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
3天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
17 3