快速业务通道

Java理论与实践: 垃圾收集简史 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

Java理论与实践: 垃圾收集简史

时间:2010-12-22 IBM Brian Goetz

Java 语言可能是使用最广泛的依赖于垃圾收集的编程语言,但是它并不是第 一个。垃圾收集已经成为了包括 Lisp、Smalltalk、Eiffel、Haskell、ML、 Scheme和 Modula-3 在内的许多编程语言的一个集成部分,并且从 20 世纪 60 年代早期就开始使用了。在 Java 理论与实践的本篇文章中,Brian Goetz 描述 了垃圾收集最常用的技术。

垃圾收集的好处是无可争辩的 ―― 可靠性提高、使内存管理与类接口设计 分离,并使开发者减少了跟踪内存管理错误的时间。著名的悬空指针和内存泄漏 问题在 Java 程序中再也不会发生了(Java 程序可能会出现某种形式的内存泄 漏,更精确地说是非故意的对象保留,但是这是一个不同的问题)。不过,垃圾 收集不是没有代价的 ―― 其中包括对性能的影响、暂停、配置复杂性和不确定 的结束 (nondeterministic finalization)。

一个理想的垃圾收集实现应该是完全不可见的 ―― 没有垃圾收集暂停、没 有因为垃圾收集而产生的 CPU 时间损失、垃圾收集器不会与虚拟内存或者缓存 有负面的互动,并且堆不需要大于应用程序的 驻留空间(即堆占用)。当然, 没有十全十美的垃圾收集器,但是垃圾收集器在过去十年中已经有了很大改进。

选项与选择

1.3 JDK 包括三种不同的垃圾收集策略,1.4.1 JDK 包括六种垃圾收集策略 以及 12 种以上用于配置和优化垃圾收集的命令行选项。它们有什么不同?为什 么需要有这么多选项?

不同的垃圾收集实现使用不同的策略来识别和收回不可到达的对象,它们与 用户程序和调度器以不同的方式互动。不同类型的应用程序对于垃圾收集有不同 的要求 ―― 实时应用程序会将要求收集暂停的持续时间短并且有限制,而企业 应用程序可能允许更长时间和可预测性更低的暂停以获得更高的吞吐能力。

垃圾收集如何工作?

有几种垃圾收集的基本策略:引用计数、标记-清除、标记-整理 (mark- compact) 和复制。此外,一些算法可以以 增量 方式完成它们的工作(不需要 一次收集整个堆,使得收集暂停时间更短),一些算法可以在用户程序运行时运 行( 并发收集)。其他算法则必须在用户程序暂停时一次进行整个收集(即所 谓的 stop-the-world收集器)。最后,还有混合型的收集器,如 1.2 和以后版 本的 JDK 使用的分代收集器,它对堆的不同区域使用不同的收集算法。

在对垃圾收集算法进行评价时,我们可能要考虑以下所有标准:

暂停时间。收集器是否停止所有工作来进行垃圾收集?要停止多长时间?暂 停是否有时间限制?

暂停的可预测性。垃圾收集暂停是否规划为在用户程序方便而不是垃圾收集 器方便的时间发生?

CPU 占用。总的可用 CPU 时间用在垃圾收集上的百分比是多少?

内存大小。许多垃圾收集算法需要将堆分割成独立的内存空间,其中一些空 间在某些时刻对用户程序是不可访问的。这意味着堆的实际大小可能比用户程序 的最大堆驻留空间要大几倍。

虚拟内存交互。在具有有限物理内存的系统上,一个完整的垃圾收集在垃圾 收集过程中可能会错误地将非常驻页面放到内存中来进行检查。因为页面错误的 成本很高,所以垃圾收集器正确管理引用的区域性 (locality) 是很必要的。

缓存交互。即使在整个堆可以放到主内存中的系统上 ―― 实际上几乎所有 Java 应用程序都可以做到这一点,垃圾收集也常常会有将用户程序使用的数据 冲出缓存的效果,从而影响用户程序的性能。

对程序区域性的影响。虽然一些人认为垃圾收集器的工作只是收回不可到达 的内存,但是其他人认为垃圾收集器还应该尽量改进用户程序的引用区域性。整 理收集器和复制收集器在收集过程中重新安排对象,这有可能改进区域性。

编译器和运行时影响。一些垃圾收集算法要

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号