介绍sunjvm中的几种垃圾收集器.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
介绍sunjvm中的几种垃圾收集器

垃圾收集的概念垃圾收集器的职责包括: 分配内存 确保任何被引用的对象仍在内存中 回收程序中不可达对象所占用的内存 正在运行的程序中被引用的对象处于存活状态,不再被引用的对象被认为已经“死去”,即通常所说的垃圾,查找并释放垃圾对象所占用内存空间的过程称为垃圾收集。 垃圾收集解决了大部分的内存管理问题,但不是全部。例如,开发者可以无限地创建对象并引用这些对象直到没有可供分配的内存空间为止。垃圾收集是一项复杂的任务,并且它本身也会占用一些时间和系统资源。 具体的用来组织内存、分配释放内存空间的算法是由垃圾收集器来处理的,这些对于开发者都是透明的。内存通常是从一个称为堆(heap)的内存池中分配的。 垃圾收集的时机由垃圾收集器决定。例如,当整个堆或堆的一部分已经被填满,或达到一个伐值时垃圾收集器会执行垃圾收集。 执行一次内存分配的请求包括查找一块连续的未被使用的特定大小的堆空间,这是非常困难的。大部分动态内存分配算法面对的主要问题是避免内存碎片,同时又要高效地分配释放内存。 垃圾收集器的理想特性? 一个垃圾收集器必须既安全又具有全面的特性。这些特性包括,运行中的程序正在使用的对象不能被错误地释放,垃圾对象所占用的内存在几个垃圾收集周期中必须被释放掉。 垃圾收集器的操作应该高效,不能使运行中的程序暂停太长的时间。然而像大多数计算机系统一样,这需要在时间、空间和频率之间做出一定的取舍。例如,如果堆空间较小,垃圾收集会很快但堆则很快会被填满,这样垃圾收集的频率会非常高。相反,如果堆空间很大,那么垃圾收集的频率不会很高,但垃圾收集却需要花费更长的时间。 垃圾收集器需要具备的另一个特性是限制内存碎片。当垃圾对象占用的内存被释放后,这些空闲的内存空间可能会分布在堆,当需要分配一个更大的内存空间时,堆中可能没有足够大的连续的内存空间可供分配。一种消除内存碎片的途径就是压缩。 可扩展性同样重要。分配内存不能成为运行在多处理器系统上的多线程应用程序的瓶颈,垃圾收集同样不能成为瓶颈。 设计选型 设计或选择一个垃圾收集算法时需要作出一些抉择。 ?????串行 vs 平行? ??? 使用串行垃圾收集,每次只执行一个任务,甚至当有多个 cpu 时,也仅有一个 cpu 被用来执行垃圾收集操作。当使用平行收集时,垃圾收集的任务会被分割为多个子任务,这些子任务会同时在不同的 cpu 上执行。平行操作会使垃圾收集在更短的时间内完成,但这是以额外的复杂性和潜在的内存碎片为代价的。 ?????并发 vs stop-the-world(即暂停程序的正常执行流程)? ??? 执行 stop-the-world 垃圾收集的时候,正在运行中的程序会被挂起。另一种方式是一个或多个垃圾收集任务与程序的执行同时进行。并发垃圾收集以并发的方式执行垃圾收集的大部分任务,当然偶尔也会挂起程序,即 stop-the-world。stop-the-world 垃圾收集比并发收集更简单,因为在垃圾收集的过程会冻结堆,暂停一切针对对象的修改。它的缺点是对一些可能会暂停的程序这或许不是必需的。与 stop-the-world 垃圾收集器相比,并发垃圾收集会使程序的挂起时间变短,但垃圾收集器需要做一些额外的工作,因为堆中的对象可能会被程序并发地修改。这增加了并发收集器的开销,这些开销会影响到性能并需要更大的堆空间。 ?????压缩 vs 非压缩 vs 拷贝? ??? 在垃圾收集器判断出内存中哪一个对象是垃圾,哪一个对象仍然被引用之后,它能够压缩内存,即把所有仍然被引用的对象移动到一块连续的内存空间中,回收剩余的内存空间。经过压缩之后,可以很容易并快速地在空闲的内存空间中分配新对象。简单地使用一个指针就可以追踪下一个可分配的内存空间的地址。与压缩垃圾收集器相比,非压缩垃圾收集器仅仅是释放垃圾对象所占用的内存而不会通过移动活动对象来生成一块连续的空闲内存空间。这样做的好处是垃圾收集任务会很快完成,缺点是可能会产生很多内存碎片。非压缩垃圾收集器分配对象的开销会大于压缩垃圾收集器,它需要搜索一块连续的能够满足新分配对象需要的内存空间。第三种选择是拷贝收集器,它把存活的对象拷贝到另外一个内存区域,它的优点是原来的内存区域就是一片连续的空闲的内存,可以分配给新创建的对象,缺点是对象的拷贝需要额外的时间和空间。 性能指标? ?????吞吐量???- 指程序运行的总时间减去垃圾收集器运行的时间 ?????垃圾收集开销???- 指垃圾收集器运行的时间 ?????暂停时间???- 指垃圾收集器运行过程中程序被挂起的时间 ?????垃圾收集频率???- 指相对于应用程序的执行,垃圾收集器运行的次数 ?????footprint???- a measure of size, such as

文档评论(0)

sunshaoying + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档