HotSpot_JVM的gc.docVIP

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

HotSpot JVM的内存管理 1 引言(Introduction) 在强大的Java? 2 平台下,J2SE可以自动的管理内存,所以将开发者从复杂的显性管理内存的工作中解放出来。 本片文档是对Sun J2SE 5.0 release版本的Java HotSpot JVM内存管理机制的概述。描述了可用于内存管理的几种内存收集器,以及给出了一些建议,例如,如何选择和配置内存收集器、如何配置收集器内存区域的尺寸。也给出了一些资料,列出了一些影响内存收集器行为的常用选项并且提供了大量有关于细节的文档链接。 Section 2 是写给那些刚刚接触自动内存管理的读者。其中有一个简短的讨论是与要求程序员手动释放对象空间对比,自动内存管理机制可以获得的好处。 Section 3 概述了一些内存回收的基本概念、设计方案和性能指标工效学Garbage Collectors in the J2SE 5.0 HotSpot JVM) The Java HotSpot virtual J2SE 5.0 update 6 中JVM包含四种垃圾收集器,都是基于代的,本节描述了代与其他类型的组合。并针对每个收集器为什么可以快速和有效的分配对象而给出了详细的资料。 HotSpot Generations 在JVM中内存被分为三代:新生代(Young Generation)、旧生代(Old Generation)和持久代(Permanent Generation)。其中新生代一般用于放置新创建的对象,而旧生代则将一些经过几次垃圾回收仍然没有被回收的对象转移存放进来。持久代用于放置一些为JVM本身的方便性而使用的对象,比如类定义、方法定义、常量、代码段等。 新生代是由一个Eden区和两个survivor区组成。如图2。大多数的对象是在Eden区生成的,(正如上文所说,少数对象可能会直接分配到旧生代里)。当一个survivor区满时,有些对象经过至少一个回收周期仍然未被回收将要进入旧生代之前,将被存放到另一个标记为空的survivor区内,等待下一次的垃圾回收。 Garbage Collection Types(垃圾收集的类型) 当新生代满时,自身范围内会做一个代内收集(有时称为轻微收集)。当旧生代或者持久代满时,将会做一次完整的收集(有时称为大规模收集),也就是说将会收集所有的代。首先收集新生代,有专门针对新生代的算法,它在新生代里可以高效的回收垃圾。然后是执行可以收集旧生代和持久代的算法。如果需要压缩,那么将会分开压缩每一个代。 当旧生代满时,如果新生代先收集,有些对象可能将要从新生代转入到旧生代,在这种情况下,在CMS收集器中新生代里的算法是不会执行的,而是旧生代的算法针对整个堆(CMS旧生代算法比较特殊,它无法收集新生代)。 Fast Allocation(快速分配) 你将会在下面看到垃圾收集器的说明。在许多情况下,内存会有大块的空间用来分配对象,使用了bump-the-pointer技术使得这些变得更有效率,也就是说,要保存之前分配的对象的末地址,在余下代中检查是否有符合新分配的要求的对象,如果有将更新指针和初始化对象。 为多线程应用分配业务时,必须注意多线程安全。如果使用全局锁将会成为瓶颈和降低性能,所以JVM使用了一种Thread-Local Allocation Buffers (TLABs)技术,为每个线程提供自己的缓冲区(即代的一小部分)用来内存分配,从而提高多线程分配的吞吐量。因为,只有一个线程分配于每个TLAB,分配可以利用高效的bump-the-pointer技术,而不需要任何锁定。极少情况下,当一个线程完全被TLAB占用并且必须得到一个新的,可以同步执行,一些操作TLABs技巧可以减少空间的浪费。比如,TLABs是平均分配尺寸耗费小于1%的Eden,在每个分配中结合使用TLABs与线性的使用bump-the-pointer技术的方式是高效的,只需要10个本地指令。 Serial Collector(串行收集器) 在串行收集器中只会使用一颗CPU进行垃圾回收,所以新生代和旧生代的回收一定是串行发生的,并且在垃圾回收期间应用程序是被挂起的。 使用串行收集器的新生代 Figure 3展示了一次使用串行收集器回收新生代内存的过程。存活在Eden中的对象被复制到了初始化为空的survivor space(在图中被标记为To)中,除了那些由于太大而直接复制到了旧生代的对象;存活在非空的survivor space(在图中被标记为From)中的对象有两个出路,如果相对来说仍然是新对象那么也被复制到了初始化为空的survivor space中,否则相对来说就是旧对象了,那么被复制到旧生代中。注意:如果To区域被填充满了,那么来自Eden和Fro

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档