Java虚拟机垃圾回收算法分析和性能调优.docVIP

Java虚拟机垃圾回收算法分析和性能调优.doc

  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文档。上传文档
查看更多
Java虚拟机垃圾回收算法分析和性能调优

Java虚拟机垃圾回收算法分析和性能调优   [摘要]阐述Java垃圾回收的作用。介绍垃圾回收算法的优缺点,基于垃圾回收提出调优方法。最后给出编码建议。   [关键词]Java虚拟机 垃圾回收 性能调优   中图分类号:TP309.05 文献标识码:A 文章编号:1671-7597(2008)0910044-01      垃圾回收(Garbage Collection,GC)是Java程序设计中内存管理的核心概念,Java虚拟机(JVM)的内存管理机制被称为垃圾回收机制,用以跟踪正在使用的对象和发现并回收不再使用的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。   垃圾回收机制的工作原理是:垃圾回收器通过监控每一个对象的运行状态(包括申请、引用、被引用、赋值等),准确及时地释放对象,释放对象的根本原则是该对象不再被引用。Java 采用有向图的方式进行内存管理,垃圾回收器从有向图的根接点(Java 程序中整个生存周期始终存在的那些类)开始,遍历被引用的所有接点,判断哪些接点符合垃圾收集的条件(即根接点不可达),然后把符合条件的对象删除,释放内存。垃圾回收算法的选择和垃圾回收系统参数的合理调节直接影响着系统性能,因此需要开发人员做比较深入的了解。      一、垃圾回收算法分析      Java虚拟机可以使用多种垃圾回收算法。任何一种垃圾回收算法都具备如下两种功能:发现无用信息对象;回收被无用对象占用的内存空间,使得该空间可被程序再次使用。   (一)垃圾回收的基本算法   引用计数法、标记清除法和节点复制法是3种基本的垃圾收集算法。   引用计数是一种简单但速度很慢的垃圾回收技术。每一个对象都含有一个引用计数器。当有引用连接到对象时,引用计数加1,当原有的引用离开作用域或置null时,引用计数减1,当某个对象的引用计数减为0时,就可以认为该对象为垃圾对象,可以予以回收。基于引用计数的垃圾收集算法运行速度较快,不会长时间中断程序执行,适合必须实时运行的程序。但为了维护引用计数的不变式,每次改写一个指针,它的旧目标单元和新目标单元的引用计数都要进行调整。而该算法最主要的缺陷在于它无法回收环形的数据结构。   在标记清除法中,收集器从根部对象开始对堆空间中的对象进行标记,所有可到达的对象被认为是存活对象,其余的则是垃圾对象,如图1所示。      算法一般分为两个步骤:垃圾检测和垃圾回收。标记清除算法的优点是可以非常自然的处理环形结构,同时操作指针没有额外的开销。但该算法是一种“停止-启动”算法。在垃圾收集器运行时,用户程序的运行必须暂停,而且这种中断可能是巨大的。关键性的安全系统,实时系统都不可能接受这么长的停顿。在节点复制算法中,收集器将整个堆等分成为两个半区,在通常程序运行时,只使用其中的一个。当运行中的程序无法获得所要求的内存时,系统就暂停当前运行的程序,启动垃圾回收程序,将当前半区中所有的活动对象拷贝到另一个半区中,拷贝完成的半区作为新的当前半区,原来被暂停的程序在新的半区内恢复运行。这样通过两个半区的角色切换,实现了垃圾对象的收集。节点复制式垃圾收集最直接的代价就是使用两个半区,因而它所需要的地址空间是非复制式的两倍。并且它同样会引起应用程序暂停。   (二)Hotspot JVM的垃圾回收算法   在Hotspot JVM中,使用“分代”方式来管理堆空间,将整个堆空间分成了四部分:保存JVM中类和方法对象的永久代(Permanent Generation);   存放存活时间较长对象的年老代(Old Generation又称为Tenured Generation);存放新建对象的年轻对象空间Eden;两个存放尚未被转移到Old Generation中的年轻对象的存活(Survivor)空间(SS#1和SS#2)。其中Eden和两个Survivor Space合称为年轻代(Young Generation)。如图2所示。    其中年老代区存放生存期比较长的对象,年轻代区存放新建的且生存期短暂的对象,而存活空间存放生存时间介于它们两者之间的对象,在SS#1中的对象比SS#2中的对象生存时间要短,存活空间中的对象可能会被移到年老代区。一个永久对象最后会被移到旧世代区,移动路径是:Eden→SS#1→SS#2→Old。      二、GC性能调优      Java规范并没有对GC的行为进行严格的规定,例如,对于采用什么类型的收集算法、什么时候进行收集等重要问题都没有明确的规定。因此不同的JVM往往有不同的垃圾回收实现算法,优化配置GC的前提是必须了解选用的JVM使用了那种垃圾回收策略。然

文档评论(0)

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

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

1亿VIP精品文档

相关文档