写点什么

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:332580
用户头像

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

关注

评论

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

搭建Prometheus+Grafana的云平台监控系统

学神来啦

云计算 Linux 运维 开发日志

iOS开发21年6月面试总结(未完待续~)

iOSer

ios 面试 ios开发 iOS 知识体系

百度智能云NIRO MAX机器人,打造智慧党建新体验!

百度大脑

人工智能 百度 机器人

一体化、标准化、可视化数据平台,博睿数据领跑智能运维新典范

博睿数据

博睿数据 数据链DNA dataview

阿里云边缘容器服务ACK@Edge 通过33项测评,拿到“2021云边协同能力认证”

阿里巴巴中间件

数字化转型须遵循“战略五原则”和“3-1-1战术”

李洋

数字化转型 信创 战略思考 企业数字化 战略技术

必须加强对电商促销节的监管:保障普通消费者合法权益

石头IT视角

C#开发之基于NPOI的操作Excel开发体验

DisonTangor

C# Excel

网易有道开源EMLL:高性能端侧机器学习计算库,大幅提高计算性能

有道技术团队

人工智能 机器学习 高性能计算 端侧AI

关于Redis分布式锁的那些事

Hex

redis 后端

🌏【架构师指南】分布式技术知识点总结(下)

洛神灬殇

分布式 架构设计 6月日更

细细阅读,3张图带你理解,零拷贝,mmap和sendFile

奔着腾讯去

c++ Linux Mmap C++后台开发 网络io

WebRTC学习—WebRTC详解

Linux服务器开发

音视频 WebRTC ffmpeg SRS流媒体服务器

移动开发iOS,薪资如何?待遇怎样!

ios开发 iOS 知识体系

终端架构深研,CodeDay 成都站等你

蚂蚁集团移动开发平台 mPaaS

flutter mPaaS Codeday Meetup

深入浅出 LVS 负载均衡(三)实操 NAT、DR 模型

UCloud技术

2021年5月云主机性能评测报告出炉,华为云跃居榜首

博睿数据

云主机 博睿数据 博睿指数

互联网推送服务原理

hasWhere

80后自立门户,90后异军突起,中国投资新势力加速崛起 | 创业邦2021年40位40岁以下投资人重磅发布

创业邦

创业

第六课作业

杰语

2021年版,拼多多/阿里/今日头条/京东 Java面经大合集(含答案)

Java架构师迁哥

专科小伙豪取三杀,斩获阿里、京东和蚂蚁Java岗offer的原因找到了!

北游学Java

Java 面试

WWDC21 给开发者最重要的7条新信息

阿里巴巴大淘宝技术

开发者 WWDC21

在线图片坐标拾取工具

入门小站

阿里云中间件首席架构师李小平:企业为什么需要云原生?

阿里巴巴中间件

BoCloud博云稳居中国容器软件市场份额TOP 5

BoCloud博云

容器

数据库设计的 10 个最佳实践

xcbeyond

数据库 数据库设计 6月日更

16倍效率提升体验,博睿数据APM成企业运维超级加速器

博睿数据

APM 博睿数据 数据链DNA

《转》HttpURLConnection自动重试机制

hasWhere

星环科技TDH8.0使用必读2: 10种数据模型全支持 未来属于多模型大数据平台

星环科技

大数据 边缘计算 知识图谱 数据管理平台 多模型数据

ios webRTC实现屏幕共享功能

侠客行

ios WebRTC iOS屏幕共享 replaykit

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