NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Sun 的 Garbage First 垃圾收集器:消除低时延与高吞吐量之间的取舍

  • 2009-04-21
  • 本文字数:1297 字

    阅读完需:约 4 分钟

Sun 公司的 Garbage First 垃圾收集器(下文将使用它的简称 G1)是一款低时延的垃圾收集器,计划用来取代 Hotspot JVM 中的 CMS。它是一种服务器风格的垃圾收集器,主要针对多处理器大内存的机器。CMS 与 G1 有两大区别。第一,G1 是一款压缩型的收集器。压缩,也就是把活动的对象从原先的存储地址移到堆的一端,那么堆的另外一端就会有整块的空闲内存,这对于长时间运行的应用系统来说非常重要,因为时间一长,这些系统不可避免都会产生内存碎片。G1 通过有效的压缩完全避免了对细微空闲内存空间的分配,这不仅大大简化了收集器,而且还消除了潜在的碎片问题。除压缩以外,G1 的垃圾收集停顿也比 CMS 容易估计,它允许用户自定义所希望的停顿参数。这种确定性也让 G1 具有某种实时级别的垃圾收集特征,但这还不是“硬实时”,因为底层操作系统的某些调度因素无法保证上述的停顿机制。尽管如此,与 Java 实时产品相比,G1 对开发人员来说相对更容易使用,因为已有的程序不需要修改代码就能利用 G1 改善自身性能。G1 采用了很多有意思的技术,它根据全局的标志信息和其度量,按各个区域的 GC 效率给区域排列垃圾收集的优先级。 InfoQ 之前有一篇文章探讨了更多的技术细节。

最近的播客上,James Gosling 强调了 G1 对于某些特定类型的大规模 Java 应用(比如财务交易)的重要性,这类应用通常具有大量活动的堆数据和相当数目的线程级别的并行计算,而且往往都运行在高端多核处理器上。

“……这类 Java 应用都有一个不为人知的秘密,就是它们其实并不‘真正’使用数据库。它们使用大量的 RAM 而不是数据库,而且极其依赖垃圾收集器,因为访问硬盘对它们而言无法接受。当每秒需要处理成千上万个事务的时候,你只能把所有东西都放在 RAM,使用散列表,并利用尽可能多的核来处理事务,而且事务的延时通常是很严重的问题。”

Gosling 接着谈到了吞吐量和确定性之间的取舍。垃圾收集器通常两者只能顾其一。在吞吐量方面优化的垃圾收集器非常适合处理运行时间长的批处理任务,垃圾收集器此时更关心的是如何尽可能快地完成整个批处理任务,而不是考虑停顿问题。相反地,如果是像网络应用这样的交互式系统,低时延的垃圾收集器则通常是最好的选择。Gosling 指出 JVM 的其它部分也存在这样的取舍,但整体来说 JVM 优化的方向是吞吐量。事实上:

“所有的再调整算法都会有这样的取舍。比如说散列表,大部分人都认为散列表的插入和删除操作所花的时间是固定的,但事实上不是。只有当插入操作不会引起对哈希值的重新计算时,这个时间才是固定的,否则单次插入会花费更长的时间。”

用户可以显式指定在 Y 毫秒的时间段里面垃圾收集的开销时间不能超过 X 毫秒,这样,G1 会尝试为应用系统的垃圾收集保持必要的短停顿和低频率,但不会低到引起不必要的吞吐量下降和内存使用率上升。吞吐量 / 低时延之间的取舍,会给垃圾收集器带来非常明显的影响,G1 应该给 Java 企业开发人员提供显著的益处。G1 包含在 Java 6 update 14 的发布中,Sun 公司的 Hotspot 团队也非常期望能收到早期试用者的反馈 bug 报告

查看英文原文: Sun’s Garbage First Collector Largely Eliminates Low Latency/High Throughput Tradeoff

2009-04-21 12:332549
用户头像

发布了 76 篇内容, 共 23.4 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

揭秘倚天实例背后的硬核实力

阿里技术

云计算 云原生

ZBC登录iZUMi Finance双挖池APY高达189%,极致通缩的典范

股市老人

2022年双碳背景下汽车行业发展洞察

易观分析

汽车 双碳

极客时间运维进阶训练营第七周作业

好吃不贵

前端培训学习后程序员的就业前景怎么样?

小谷哥

南京哪个java培训机构好?

小谷哥

【精彩剧透】PyCon China 2022 邀您共赴技术Party!

PyChina

Python 开源 开发者 技术日

以Amazon Braket SDK和QuTrunk为例介绍量子编程框架

启科量子开发者官方号

量子计算

开往春天的自动驾驶,从特斯拉和毫末智行的AI技术探索说起

脑极体

WorkPlus SE专业版:政企值得托付即时通讯移动办公平台

WorkPlus

已帮助数万程序员找到工作的阿里巴巴面试参考指南到底有什么魅力?

Java全栈架构师

程序员 程序人生 后端 java面试 八股文

Renderbus瑞云渲染正式支持UE云渲染!离线渲染+实时渲染=渲染起飞!

Renderbus瑞云渲染农场

UE5 Renderbus瑞云渲染 3D制作软件

ClickHouse在自助行为分析场景的实践应用

转转技术团队

Clickhouse MPP 大数据分析 OLAP 场景实践

大数据培训前景怎样

小谷哥

ZBC登录iZUMi Finance双挖池APY高达189%,极致通缩的典范

EOSdreamer111

StarRocks技术内幕 | 打造一款强大成熟的数据库有多难?

StarRocks

数据库·

企业即时通讯软件哪个比较好用?

WorkPlus

用一张图说一说 ChatGPT 内部技术工作流程

非喵鱼

Java 人工智能 AI 12 月 PK 榜 ChatGPT

已经看过这本书的“眼替”,带你探索广告投放的秘密!“照着操作,果然就能有效果!”

图灵社区

流量

ArkUI开发趣味体验,快来抽取限量HarmonyOS专属头像!

HarmonyOS开发者

HarmonyOS

KCL v0.4.4 发布!自定义 YAML Manifests 输出以及 Python SDK!

Peefy

编程语言 Configuration Kubernetes Serverless #DevOps

AWS AMAZON BRAKET与量子计算

启科量子开发者官方号

随机方法性能差异

FunTester

谁能通俗的解释下,什么是云服务器?

Finovy Cloud

服务器 云服务器 云渲染 云渲染农场

鹅厂28K程序员,不会微服务,一周就被优化了?

小小怪下士

Java 程序员 面试 微服务

IT机构哪家Java培训比较好

小谷哥

数据库日常实操优质文章分享(含Oracle、MySQL等) | 11月刊

墨天轮

MySQL 数据库 oracle 性能优化 SQL语句

全面上新!阿里2023版(Java岗)面试突击手册,Github已标星37K

Java永远的神

程序员 架构 程序人生 后端 java面试

【异常】window 10 安装node.js时遇到2502 2503错误解决方法

No8g攻城狮

nodejs Node node,js

知识图谱与古希腊人物关系

数新网络官方账号

知识图谱

大数据培训出来后就业好吗?

小谷哥

Sun的Garbage First垃圾收集器:消除低时延与高吞吐量之间的取舍_Java_Charles Humble_InfoQ精选文章