写点什么

在堆增大的同时确保垃圾回收停顿时间短暂——专访 Cliff Click 博士

  • 2010-04-27
  • 本文字数:1510 字

    阅读完需:约 5 分钟

为了达到所需的吞吐量,越来越多的采用 Java 编写的企业级应用把大部分处理过程从数据库转移到内存中。这类应用的特点是存在大量活跃堆数据和线程级别的并发,并且往往运行在高端多核处理器上。这种特点意味着堆大小和垃圾回收停顿时间之间的强相关性成为 Java 应用伸缩性的主要限制之一,专家进行了大量的研究以努力改进这种情况。

例如预计今年推出的 Java 7 中,即将包含一个新的垃圾回收器— Garbage-First —目的是确保持续的短停顿时间,尽量消除低延迟 / 高吞吐量之间的折衷。与这种纯软件方法相反 Azul Systems 硬件基于自定制的 54 核处理器构建,专为运行高标准 Java 应用程序设计,支持内置于处理器的写操作和读操作屏障。InfoQ 最近采访了 HotSpot Server 编译器的前架构师和首席程序员、现任 Azul Systems 公司首席 JVM 架构师的 Cliff Click 博士,讨论了 Azul 的解决方案。第一个问题是 Azul 硬件适用的领域:

任何需要可靠的低停顿时间(业务关键应用)或者超大堆的领域。类似金融建模的超大堆应用可能需要 300G 大小的堆存储金融数据,然后通过数百个处理器并行操作。我们针对 Java DB 缓存也做得很好,在缓存中提供 10 到 100G 的数据。低停顿时间应用通常意味着你希望及时地将网页回馈给客户。几秒钟的延迟通常会让客户认为“网站关闭了”并转向他处或者提出投诉。一些大牌公司在 Azul 设备上部署 Web 展现应用,因为我们能够提供高负载下的出色(平稳)响应时间。一些典型的用途如客户的门户网站、大缓存(针对性能和扩展性)和内部业务应用的 Web 版(如库存管理、“请假系统”等等)。

InfoQ: 按照我的理解,Azul 硬件的关键优势之一是它直接支持写操作和读操作屏障以获得低 GC 停顿。是这样吗?

是啊!特别是,拥有读操作屏障允许你切换到较简单的 GC 算法—更易于并发、扩展和强壮。我们在多年前已经改变了算法,我们的垃圾回收机制能够处理超越竞争对手数量级大小的堆(和分配频率)。

InfoQ: 显然采用软件也能够做到。哪些情况下值得使用硬件?

学术文献已经对该领域做了很多探讨,已知的问题是单线程性能下降大约 10% 到 20%。IBM 的 Metronome 硬实时垃圾回收器采用 Brooks 风格的读操作屏障,并极力把延迟时间降低到正常回收器的 30%…但是,一些消耗在于硬实时和不仅仅是读操作屏障。IBM 的确卖出了 Metronome 回收器(我相信大部分是军事领域)。

InfoQ: Azul 的 GC 停顿与 Oracle 的 Garbage-First 垃圾回收器或者使用 Java 实时产品相比如何?

我觉得 G1 将很有意思…如果有的话。我们的垃圾回收器到目前为止已经在生产环境中稳定运行了 4 年。我认为现在与 G1 比较为时过早。实时 Java 产品往往存在一些问题导致它们不适合大型企业应用——通常是 GC 局限于 4G 堆大小或者单垃圾回收器(有时是单 mutator 线程)。RTSJ 规范要求程序重写以使用有限的内存。

InfoQ: 对于 GC 来说,并发存在哪些局限?是否存在某部分 GC 算法在非并发情况下效率也很高?

人们总是把堆搞得难以并发收集,但实际上大多数大型堆有足够的并发性。其他 GC 问题也可以逐个解决,我们多年来一直在进行这项工作,并有了极具扩展性和并发性的 GC。我们能够(有时候)有效地并发运行超过 100 个 GC 线程。

InfoQ: 是否计划开源 Azul 虚拟机(或者重新为 OpenJDK 项目工作)?

我们一直在考虑开源部分成果,因为这很有意义。例如,我们的 CheckedCollections 和 LockedCollections 捕捉(或者纠正)常见的编程错误,如标准的非锁定 Collections 类被多个线程使用同时一个线程正在写入。

Azul 虚拟机的更多信息可以查看这里或者Click 博士的博客

查看英文原文 Keeping Garbage Collection Pauses Short with Growing Heap Sizes: Q&A With Dr. Cliff Click

2010-04-27 08:261572
用户头像

发布了 501 篇内容, 共 248.3 次阅读, 收获喜欢 57 次。

关注

评论

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

MISRA C++:2023已发布,一起来了解下C++发展史及使用技巧

龙智—DevSecOps解决方案

MISRA C++:2023 MISRA

2024程序员必看前端行业分析

伤感汤姆布利柏

护航千行百业高质量发展,天翼云加速构建稳定性保障能力体系!

天翼云开发者社区

云计算 安全 云服务

多功能fcpx视频剪辑软件:Final Cut Pro激活中文版

胖墩儿不胖y

Mac软件 视频编辑工具 视频编辑 编辑视频

广发证券基于 Apache Kyuubi 构建“提效可控”大数据赋能层

网易数帆

大数据 spark 开源 Kyuubi 广发证券

​如何在iPhone设备中查看崩溃日志

一文带你深入理解K8s-Pod的意义和原理

华为云开发者联盟

云原生 华为云 华为云开发者联盟

如何理解 RPC 与 Protobuf

Liam

gRPC 后端 网络协议 protobuf roc

软件开发

Geek_8da502

强大的数据同步备份:DropSync 3 激活最新版

mac大玩家j

Mac软件 备份同步工具 Mac同步软件

【稳定性】浅谈11.11大促之预案演练 | 京东物流技术团队

京东科技开发者

济宁能源:推动一体两翼战略,以资产数智化管理培育千亿产业

用友BIP

2023年总结:NFT经济从不可替代到可替代的转变

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

ZCube:在我的优惠券中的落地实践 | 京东云技术团队

京东科技开发者

1688商品评论数据接口(1688.item_review)

tbapi

1688商品评论接口 1688商品评价接口 1688商品评论API 1688评价接口 1688评论API接口

AI赋能游戏开发,如何更好地处理随之而来的海量数据,更好地利用开发游戏?

龙智—DevSecOps解决方案

人工智能 AI 游戏

一步一步教你写kubernetes sidecar

不在线第一只蜗牛

Kubernetes k8s 多集群

洞悉代币资金流,助力 GameFi 项目运营决策

Footprint Analytics

gamefi #区块链

你是否想知道如何应对高并发?Go语言为你提供了答案!

EquatorCoco

高并发 Go 语言 程序开发

BRC20铭文合约代币系统开发

西安链酷科技

加密货币 ERC20 发币

波场能量租赁平台开发 带宽租赁收益挖矿

西安链酷科技

波场能量 能量租赁

司库管理体系构建与价值创造

用友BIP

2023年度华为云优秀开发者榜单揭晓,来看看你榜上有名吗?

华为云开发者联盟

程序员 开发者 华为云 华为云开发者联盟

BRC20铭文发币成本是多少?一文读懂

西安链酷科技

铭文币

ATL:用对方法招对人,智能招聘降低人工成本

用友BIP

智能招聘

一篇了解springboot3请求参数种类及接口测试

快乐非自愿限量之名

springboot 开发语言

使用Python的数据可视化库Matplotlib实现折线图教程。

百度搜索:蓝易云

Python Linux 运维 云服务器 matplotlib

超详细Redis入门教程—Redis分布式系统详解

百度搜索:蓝易云

redis 云计算 Linux 运维 云服务器

小程序如何帮助在线教育打通公私域

Geek_2305a8

京东商品详情数据接口(JD.item_get)丨京东API接口

tbapi

京东商品详情数据接口 京东API接口 京东商品数据接口 京东商品详情API接口

Tiamat携手火山引擎,让创作者的想象成为现实

火山引擎边缘云

边缘计算 火山引擎边缘计算 AIGC 边缘计算平台

在堆增大的同时确保垃圾回收停顿时间短暂——专访Cliff Click博士_Java_Charles Humble_InfoQ精选文章