JVM分代垃圾回收详述西安北大青鸟华美校区.docxVIP

JVM分代垃圾回收详述西安北大青鸟华美校区.docx

  1. 1、本文档共16页,可阅读全部内容。
  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文档。上传文档
查看更多
JVM分代垃圾回收详述西安北大青鸟华美校区.docx

JVM分代垃?圾回收详述 为什么要分代?分代的垃圾回?收策略,是基于这样一?个事实:不同的对象的?生命周期是不?一样的。因此,不同生命周期?的对象可以采?取不同的收集?方式,以便提高回收?效率。在Java程?序运行的过程?中,会产生大量的?对象,其中有些对象?是与业务信息?相关,比如Http?请求中的Se?ssion对?象、线程、Socket?连接,这类对象跟业?务直接挂钩,因此生命周期?比较长。但是还有一些?对象,主要是程序运?行过程中生成?的临时变量,这些对象生命?周期会比较短?,比如:String?对象,由于其不变类?的特性,系统会产生大?量的这些对象?,有些对象甚至?只用一次即可?回收。试想,在不进行对象?存活时间区分?的情况下,每次垃圾回收?都是对整个堆?空间进行回收?,花费时间相对?会长,同时,因为每次回收?都需要遍历所?有存活对象,但实际上,对于生命周期?长的对象而言?,这种遍历是没?有效果的,因为可能进行?了很多次遍历?,但是他们依旧?存在。因此,分代垃圾回收?采用分治的思?想,进行代的划分?,把不同生命周?期的对象放在?不同代上,不同代上采用?最适合它的垃?圾回收方式进?行回收。如何分代如图所示:虚拟机中的共?划分为三个代?:年轻代(Young Genera?tion)、年老代(Old Genera?tion)和持久代(Perman?ent Genera?tion)。其中持久代主?要存放的是J?ava类的类?信息,与垃圾收集要?收集的Jav?a对象关系不?大。年轻代和年老?代的划分是对?垃圾收集影响?比较大的。年轻代:所有新生成的?对象首先都是?放在年轻代的?。年轻代的目标?就是尽可能快?速的收集掉那?些生命周期短?的对象。年轻代分三个?区。一个Eden?区,两个Surv?ivor区(一般而言)。大部分对象在?Eden区中?生成。当Eden区?满时,还存活的对象?将被复制到S?urvivo?r区(两个中的一个?),当这个Sur?vivor区?满时,此区的存活对?象将被复制到?另外一个Su?rvivor?区,当这个Sur?vivor去?也满了的时候?,从第一个Su?rvivor?区复制过来的?并且此时还存?活的对象,将被复制“年老区(Tenure?d)”。需要注意,Surviv?or的两个区?是对称的,没先后关系,所以同一个区?中可能同时存?在从Eden?复制过来的对?象,和从前一个S?urvivo?r复制过来的?对象,而复制到年老?区的只有从第?一个Surv?ivor区过?来的对象。而且,Surviv?or区总有一?个是空的。同时,根据程序需要?,Surviv?or区是可以?配置为多个的?(多于两个),这样可以增加?对象在年轻代?中的存在时间?,减少被放到年?老代的可能。年老代:在年轻代中经?历了N次垃圾?回收后仍然存?活的对象,就会被放到年?老代中。因此,可以认为年老?代中存放的都?是一些生命周?期较长的对象?。持久代:用于存放静态?文件,如今Java?类、方法等。持久代对垃圾?回收没有显著?影响,但是有些应用?可能动态生成?或者调用一些?class,例如Hibe?rnate等?,在这种时候需?要设置一个比?较大的持久代?空间来存放这?些运行过程中?新增的类。持久代大小通?过-XX:MaxPer?mSize=N进行设置。什么情况下触?发垃圾回收由于对象进行?了分代处理,因此垃圾回收?区域、时间也不一样?。GC有两种类?型:Scaven?ge GC和Ful?l GC。Scaven?ge GC一般情况下,当新对象生成?,并且在Ede?n申请空间失?败时,就会触发Sc?avenge? GC,对Eden区?域进行GC,清除非存活对?象,并且把尚且存?活的对象移动?到Survi?vor区。然后整理Su?rvivor?的两个区。这种方式的G?C是对年轻代?的Eden区?进行,不会影响到年?老代。因为大部分对?象都是从Ed?en区开始的?,同时Eden?区不会分配的?很大,所以Eden?区的GC会频?繁进行。因而,一般在这里需?要使用速度快?、效率高的算法?,使Eden去?能尽快空闲出?来。Full GC对整个堆进行?整理,包括Youn?g、Tenure?d和Perm?。Full GC因为需要?对整个对进行?回收,所以比Sca?venge GC要慢,因此应该尽可?能减少Ful?l GC的次数。在对JVM调?优的过程中,很大一部分工?作就是对于F?ullGC的?调节。有如下原因可?能导致Ful?l GC:年老代(Tenure?d)被写满持久代(Perm)被写满System?.gc()被显示调用上一次GC之?后Heap的?各域分配策略?动态变化分代垃圾回收?流程示意软件测试的原?则:1、应当把“尽早地和不断?地进行软件测?试

文档评论(0)

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

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

1亿VIP精品文档

相关文档