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

JavaOne: Garbage First

  • 2008-05-19
  • 本文字数:1454 字

    阅读完需:约 5 分钟

Sun 的 HotSpot 垃圾收集器可分为两类:新生区(young generation)与老年区(tenured generation)。大部分的内存分配在新生区中进行,相对于垃圾收集的间隔时间来说,它经过了优化并且生命周期很短。经过几次垃圾收集后仍然存活于 新生区中的对象将被迁移到老年区中,这部分区域通常更大并且垃圾收集不那么频繁。新生区收集器分为连续式(Serial)、 同新式(ParNew)及并行扫描式(Parallel Scavenge)三种。所有这三种都是拷贝收集器。连续式使用了一个单独的 GC 线程,而同新式与并行扫描式都使用了多线程。老年区收集器都使用了标记扫 描压缩(mark-sweep-compact)算法。同样老年区收集器也分为三种:Serial Old(另一个单独的 GC 线程)、Parallel Old(使用多个 GC 线程)及 CMS(一个多并发低暂停的收集器)。Garbage First 的目标在于替换掉 CMS 并且采取了某些不同的方式——跨越了新生区和老年区的边界。

在今年 JavaOne 的一个展示中,Tony Printezis 对 Garbage First 进行了详尽的介绍,在 JavaOne 大会的网站上有一个随后的采访。Printezis 概述了 Garbage First (G1)的工作方式:

“堆被切分成固定大小的区域,同时两个区域之间的分隔基本上是合理的。因此我们可以认为一些区域是新的,另一些是老的。在 G1 中所有的空间回收都是通过拷 贝完成的。G1 选择一组区域,从那些区域中摘出存活的对象,然后将其拷贝到另一组区域中。这就是 G1 中空间回收的方式,而不是 CMS 中所采取的那种方式 (拷贝与适当的重分配的组合方式)。”

Printezis 继续阐述了新的收集器的三个主要目标:

“首要目标是随始终一致的低停顿率。本质上,由于 G1 在处理同时做压缩,它将对象从堆的一个地方拷贝到另一个地方。这样,由于压缩的原因,它不会遇到 CMS 可能会遇到的碎片问题。总会有连续空闲的空间供分配,这就使得 G1 拥有始终一致的停顿率。
第二个目标是尽量避免完全的 GC。在 G1 对全局进行标记并决定堆上对象的活跃度后,它立刻就知道堆上的哪些区域几乎是空闲的。它将首先处理那些区域,腾出 大量空间。通过这种方式,垃圾收集器将获得更多空间并减少完全 GC 的可能性。这也是为什么该垃圾收集器叫做 Garbage-First 的原因。
最后一个目标是良好的吞吐量。对于我们很多客户来说,吞吐量意味着一切。我们期望 G1 拥有良好的吞吐量以满足我们客户的需求。”

Sun 研究小组发表了一篇论文(pdf 格式)更加详尽地论述了Garbage-First 并深入分析了如何实现这些目标,尤其是实时目标。大多数实时收集器工作在单个对象层次上,而 Garbage First 则在区域层次上进行收集。如果任何区域不再包含存活的对象时,它就会被立刻回收。用户可以为停顿率指定一个目标,G1 会基于之前的收集对此时可 回收的区域数量作出估计。该收集器对区域回收的代价有一个合理且精确的模型,所以“该收集器可以在给定的停顿时间内(高概率)选择一组可被回收的区域。” 换句话说,Garbage-First 并不是一个纯粹的实时收集器——它以高概率但不绝对地满足软实时目标。作为交换,Garbage-First 应该具 备更高的吞吐量以作为软实时的补偿,但是其仍会适度遵循实时的限制。这对于经常产生大量存活堆数据和线程级别数据的大规模服务器端应用来说是非常棒的。 Garbage-First 还提供了一些出色的控制,使得用户可以在垃圾收集的执行周期中指定一小部分时间——例如,在下一个120 秒中最多花20 秒的时 间在垃圾收集上。

Garbage First 将会包含在 Java SE 7 中并且过几周就会被提交。它也将以升级包的方式加入到 Java 6 中。

查看英文原文: JavaOne: Garbage First

2008-05-19 04:292344
用户头像

发布了 88 篇内容, 共 258.6 次阅读, 收获喜欢 8 次。

关注

评论

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

生成式AI领先,实现客服机器人真智能

百度开发者中心

人工智能 机器人 生成式AI 文心一言

Clang编译数据库信息扩展

maijun

Clang 编译数据库

面试了38位Java候选人之后,我总结出了他们关于面试中的16条通病

程序员小毕

Java 程序员 面试 简历 八股文

Parallels Desktop 19 永久激活安装Windows图文教程

晴雯哥

软件测试/测试开发丨Python 学习笔记 之 链表

测试人

Python 程序员 软件测试 自动化测试 测试开发

Graph + LLM 实践指南|如何使用自然语言进行知识图谱构建和查询

悦数图数据库

数据库 图数据库

探索生成式人工智能的前景

高端章鱼哥

人工智能 AIGC 生成式人工智能

iOS上架审核宝典:注意事项与实用工具分享

雪奈椰子

ios打包 IPA上传

生成式AI:业务流程的变革与机遇

百度开发者中心

人工智能 生成式AI 文心一言

生成式AI:重新定义生产力与创造力

百度开发者中心

人工智能 ChatGPT 生成式AI 文心一言

2023年广州国际大健康产品及健康食品展会

秋硕展览

2023健博会 保健用品展 护理用品

大数据平台与数据仓库的五大区别

行云管家

大数据 数据仓库 数据安全 大数据平台

如何使用io_uring构建快速响应的I/O密集型应用?

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 8 月 PK 榜

打造千亿文件量级的大规模分布式文件系统

Baidu AICLOUD

文件系统 分布式文件存储 元数据

大数据平台三大优势详解-行云管家

行云管家

数据库 大数据 数据安全 大数据平台

业务需要咨询?开发遇到bug想反馈?开发者在线提单功能上线!

荣耀开发者服务平台

开发者 在线客服 工单 技术支持

MegEngine 使用小技巧:Profiler使用手册

MegEngineBot

开源 性能优化

HarmonyOS“一次开发,多端部署“优秀实践——玩机技巧,码上起航

HarmonyOS开发者

HarmonyOS

DR5018M|IPQ5018 11AC SOM WIFI6 Pioneering the Future of Wireless Innovation

wallyslilly

wifi6 ipq5018

生成式AI助力文学艺术创作

百度开发者中心

人工智能 艺术 文心一言

生成式AI:助力网络安全,挑战与机遇并存

百度开发者中心

人工智能 网络安全、 生成式AI 文心一言

PHP/MySQL开发环境 MAMP Pro for Mac激活安装

胖墩儿不胖y

Mac软件

一文带你全面理解向量数据库

这我可不懂

数据库 向量数据库

2023开源和信息消费大赛新闻发布会在京召开

开放原子开源基金会

Microsoft Outlook 2021 for mac v16.76.2中文版

mac

苹果mac Windows软件 Outlook2021

Presto 设计与实现(十二):SQL 逻辑计划

冰心的小屋

数据湖 presto 设计与实现 SQL Plan

TDD、BDD、ATDD都是什么、有什么区别?(上)

禅道项目管理

​iOS上架审核宝典:如何避免被拒一次提交成功

ios

Graph + LLM|图数据库技术如何助力行业大语言模型应用落地

悦数图数据库

数据库 图数据库

没有永远的王者…Zig替代C,将成定局!

互联网工科生

C语言 C++ Zig语言

万界星空科技|免费开源MES系统|自动排产管理

万界星空科技

开源 MES系统

JavaOne: Garbage First_Java_Charles Humble_InfoQ精选文章