首页 GC算法

GC算法

举报
开通vip

GC算法GC算法 JDK5.0 垃圾收集优化之 --Don't Pause 作者,江南白衣~最新版优接, ~版优所有~优优优保留原文优接。 原本想把优目更优优的定优--《不要停》的~但优是自己YY一下就算了。 Java优优Server最大的障碍~就是JDK1.4版之前的的串行收集机制垃圾会引起优优优的服优优停~明白原理后~想想那些用JDK1.3写Server的先优~不得不后怕。 好在JDK1.4已优始支持多优程行的后台收集算法~并垃圾JDK5.0优优化了默优优的优置。 一、考优料,参 1. Tuning Garba...

GC算法
GC算法 JDK5.0 垃圾收集优化之 --Don't Pause 作者,江南白衣~最新版优接, ~版优所有~优优优保留原文优接。 原本想把优目更优优的定优--《不要停》的~但优是自己YY一下就算了。 Java优优Server最大的障碍~就是JDK1.4版之前的的串行收集机制垃圾会引起优优优的服优优停~明白原理后~想想那些用JDK1.3写Server的先优~不得不后怕。 好在JDK1.4已优始支持多优程行的后台收集算法~并垃圾JDK5.0优优化了默优优的优置。 一、考优料,参 1. Tuning Garbage Collection with the 5.0 Java Virtual Machine 官方指南。 2. Hotspot memory management whitepaper 官方白皮优。 3. Java Tuning White Paper 官方文。 档 4. FAQ about Garbage Collection in the Hotspot 官方FAQ~JVM1.4.2。 5. Java HotSpot 虚垃圾优机中的收集 JavaOne2004上的中文 ppt 关于艾滋病ppt课件精益管理ppt下载地图下载ppt可编辑假如ppt教学课件下载triz基础知识ppt 6. A Collection of JVM Options JVM优优的超完整收集。 二、基本念概 1、堆(Heap) JVM管理的存叫堆。在内32Bit操作系优上有1.5G-2G的限制~而64Bit的就没有。 JVM初始分配的存由内-Xms指定~默优是物理存的内1/64但小于1G。 JVM最大分配的存由内-Xmx指定~默优是物理存的内1/4但小于1G。 默优空余堆存小于内40%优~JVM就增大堆直到会-Xmx的最大限制~可以由-XX:MinHeapFreeRatio=指定。 默优空余堆存大于内70%优~JVM少堆直到会减-Xms的最小限制~可以由-XX:MaxHeapFreeRatio=指定。 服优器一般优置-Xms、-Xmx相等以避免在每次GC 后优整堆的大小~所以上面的两个参数没优用。 2.基本收集算法 1.优制,堆分成相同空优~根将内两个从(ThreadLocal的优象~优优静 象,优始优优每一优优的活优优象~空优个将A的活优优象全部优制到空优 B~然后一次性回收整空优个A。 因优只优优活优优象~所有活优优象优制走之后就空整空优~不用去将清个 优优死优象~所以遍优空优的成本优小~但需要巨大的优制成本和优多的 内存。 2.优优除清(mark-sweep),收集器先根优始优优所有活优优象~优优优活优优从 象。然后再遍优一次整存域~把所有有优优活优的优象优行回收个内区没 优理。优算法遍优整空优的成本优大优停优优空优大小优性增大~而且个随 整理后堆里的碎片多。 很 3.优优整理(mark-sweep-compact),优合了上述者的做法和优点~先优两 优活优优象~然后其合成优大的存优。 将并内 可优~有免优的午餐~无优采用优制优是优优除算法~自优的优西都要付没清 出大的性能代价。 很 3.分代 分代是Java收集的一大亮点~根据优象的生命周期优短~把堆分垃圾 优3代,个Young~Old和Permanent~根据不同代的特点采用不同的收集算法~优优避短也。 Young(Nursery)~年优代。究 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 明大部分优象都是朝生暮死~生优研随随 的。因此所有收集器都优年优代优优了优制算法。 优制算法优点是只优优活优优象~缺点是优制成本高。因优年优代只有少量的优象能熬到收集~因此只需少量的优制成本。而且优制收集器只优优活优优垃圾 象~优那些占了最大比率的死优象优而不优~充分优优了遍优空优成本低的优点它。 Young的默优优优4M~堆存增大~优优随内1/15~JVM根据情优优会况管理其大小优化。 -XX:NewRatio= 可以优置参数Young与Old的大小比例~-server优默优优1:2~但优优上young优优优低于优比率启个,如果信不优JVM~也可以用-Xmn硬性优定其大小~有文档荐推优优Heap优大小的1/4。 Young的大小非常非常重要~优“后面优停优优优先收集器”的优述。 Young里面又分优3域~一个区个Eden~所有新建优象都存在于优会区两个~Survivor~用优区来将施优制算法。每次优制就是Eden和第一优Survior的活优象优制到第2优~然后空清Eden与第一优Survior。Eden与Survivor的比例由-XX:SurvivorRatio=优置~默优优32。Survivio大了会浪优~小了的优~会潜区区使一些年优优象逃到老人~引起老人的不安~但优个参数并优性能不重要。 Old(Tenured)~年老代。年优代的优象如果能优挺优次收集~就优数会入老人区区区没。老人使用优优整理算法。因优老人的优象都那优容易死的~采用优制算法就要反优的优制优象~不合算~只好采用优优理算法~但优优理算很清清 法其优也不优松~每次都要遍优域所有优象~所以优是有免优的午餐区内没啊。 -XX:MaxTenuringThreshold=优置熬优年优代多少次收集后移入老人区~CMS中默优优0~熬优第一次GC就优入~可以用-XX: +PrintTenuringDistribution优看。 Permanent~持久代。优装Class信息等基优据~默优数64M~如果是优多很很多的服优程序~需要加大其优置-XX:MaxPermSize=~否优优了之后它会引起fullgc()或Out of Memory。 注意Spring~Hibernate优优喜优AOP优优生成优的框内架需要更多的持久代存。 4.minor/major collection 每代优了之后都个会促优collection~;外另Concurrent Low Pause Collector默优在老人区68%的优候促优)。GC用优高的优率优young优行优描和回收~优优叫做minor collection。 而因优成本优系优Old的优优回收优率要低多~同优优很Young和Old的收集优称major collection。 System.gc()引优会major collection~使用-XX: +DisableExplicitGC禁止它~或优优CMS优并-XX: +ExplicitGCInvokesConcurrent。 5.小优 Young -- minor collection -- 优制算法 Old(Tenured) -- major colletion -- 优优除清/优优整理算法 三、收集器 1.古老的串行收集器(Serial Collector) 使用 -XX:+UseSerialGC~策略优年优代串行优制~年老代串行优优整理。 2.优吐量优先的行收集器并(Throughput Collector) 使用 -XX:+UseParallelGC ~也是JDK5 -server的默优优。策略优, 1.年优代优停优用程序~多收集优程行的优制收集~优程默优优个垃圾并数 CPU个数~CPU很–多优~可用XX:ParallelGCThreads=少优程。减数 2.年老代优停优用程序~串行收集器一优~优收集优程优优整理。 与垃圾 所以需要2+的CPU优才会学优于串行收集器~适用于后台优理~科优算。 可以使用-XX:MaxGCPauseMillis= 和 -XX:GCTimeRatio 优整来GC的优优。 3.优停优优优先的优收集器并(Concurrent Low Pause Collector-CMS) 前面优了优优多~都是优了优优做优优...... 使用-XX:+UseConcMarkSweepGC~策略优, 1.年优代同优是优停优用程序~多收集优程行的优制收集。个垃圾并 2.年老代优只有次短优停~其两与并清他优优优用程序收集优程优的除。 3.1 年老代优述 行并(Parallel)优与并(Concurrent)优一字之差~行指多收集优并条垃圾程行~优指用优优程收集优程优~程并并与垃圾并运垃圾序在优优行~而收集程序运另个个行于一CPU上。 优收集一优始短优的停并会很来止一次所有优程优始初始优优根优象~然后优优优程优用优程一起优行~最后与并运很并又短的优停一次~多优程优行的重新优优之前可能因优优而并与并清漏掉的优象~然后就优始优用程序优的除优程。可优~最优的遍优优程都是优用程两个与并序优优行的~比以前的串行算法改优太多太多了,,, 串行优优除是等年清并与老代优了再优始收集的~而优收集因优要优用程序一起行~运内如果优了才收集~优用程序就无存可用~所以系优默优68%优的优候就优始收集。存已优得优大~内内没吃存又有优优快的优候~可以用-XX:CMSInitiatingOccupancyFraction=恰当增大优比率。 3.2 年优代优述 可惜优年优代的优制收集~依然必优停止所有优用程序优程~原理如此~只能多靠CPU~多收集优程优并来你提高收集速度~但除非优的Server占独整台服优器~否优如果服优器上本身优有多其很来他优程优~切优起速度就..... 所以~到最后~优停优优的优就搞瓶落在了年优代的优制算法上。 因此Young的大小优置挺重要的~大点就不用优繁GC~而且增大GC的优隔后~可以优多点优象自己死掉而不用优制了。但Young增大优~GC造 成的停优优优攀升得非常恐怖~比如在我的机器上~默优8M的Young~只需要几毫秒的优优~64M就升到90毫秒~而升到256M优~就要到300毫秒了~峰优优会攀到恐怖的800ms。优叫优制算法~要等Young优了才优始收集~优始收集就要停止所有优程。 呢 3.3 持久代 可优置-XX:+CMSClassUnloadingEnabled -XX: +CMSPermGenSweepingEnabled~使CMS收集持久代的优~而不是fullgc~netbeans5.5 performance文的档荐推。 4.增量(train算法)收集器(Incremental Collector) 已停止优优~–Xincgc优优默优优优优收集器。 并 四、优停优优优示 加入下列参数 (优将PrintGC和Details中优的空格去掉~CSDN很怪的优优是禁止字句, -verbose:gc -XX:+PrintGC Details -XX:+PrintGCTimeStamps 会运将程序行优程中优示如下优出 9.211: [GC 9.211: [ParNew: 7994K->0K(8128K), 0.0123935 secs] 427172K->419977K(524224K), 0.0125728 secs] 优示在程序运行的9.211秒优生了Minor的收集~前一垃圾数段据优优新生区从~7994k整理优0k~新生优大小优区8128k~程序优停了12ms~而后一段数个据优优整堆。 优于年老代的收集~优停优生在下面优两个段~CMS-remark的中是断17毫秒, [GC [1 CMS-initial-mark: 80168K(196608K)] 81144K(261184K), 0.0059036 secs] [1 CMS-remark: 80168K(196608K)] 82493K(261184K),0.0168943 secs] 再加两个参数 -XX:+PrintGCApplicationConcurrentTime -XX: +PrintGCApplicationStoppedTime优优停优优看得更。 清晰 五、真正不停的BEA JRockit 与Sun RTS2.0 Bea的JRockit 5.0 R27 的特色之一是优优定的收集决垃圾策略~用优可以定自己优决确心的是优吐量~优停优优优是定的优停优优~再由JVM在行优运优优定、决垃圾改优改优收集策略。 的它Deterministic GC的优优是-Xgcprio: deterministic~可以把号称优停可以控制在10-30毫秒~非常的牛~一句Deterministic道尽了RealTime的优。 不优优真档看一下文~30ms的优优优境是1 GB heap 和 平均 30% 的活优优象(也就是300M)活优优象~2 个Xeon 3.6 GHz 4G内存 ~或者是4 个Xeon 2.0 GHz~8G存。 内 最可惜JRockt的license很个奇怪~优然平优使用免优~但优30ms的优优就需要优优整个Weblogic Real Time Server的license。 其他免优优优~有, •-Xgcprio:pausetime -Xpausetarget=210ms 因优免优~所以最低只能优置到200ms pause target。 200ms是 Sun优优Real-Time的分界优。 •-Xgc:gencon 普通的优做法~并效率也不优。 JavaOne2007上有Sun的 Java Real-Time System 2.0 的介优~RTS2.0基于JDK1.5~在Real-Time Garbage Collctor上又有改优~但优在beta版优~只状供优OEM~更怪。 六、JDK 6.0的改优 因优JDK5.0在Young优大优的表优优是不优优人优意~又优优看JDK6.0的改优~优果稍稍失望~不涉及我最优痛的年优代优制收集改良。 1.年老代的优优-除收集~行优行优优清并 JDK5.0只优了一收集优程优用优程优优优~而条与并6.0可以优多收集优程条来区做优优~优短优优老人所有活优优象的优优。 2.加大了Young的默优大小区 默优大小从4M加到16M~堆存的从内1/15增加到1/7 3.System.gc()可以优用程与并序优优行 使用-XX:+ExplicitGCInvokesConcurrent 优置七、小优 1. JDK5.0/6.0 优于服优器优用~我优使用Concurrent Low Pause Collector~优年优代~优 停优多优程行优制收集并与并~优年老代~收集器优用程序行优优--整理收集~以到量短的收集优优。 达尽垃圾 本着没乱属写有深刻优优前不要胡优化的宗旨~命令行性只需优优优, -server -XmsM - XmxM -XX:+UseConcMarkSweepGC -XX:+PrintGC Details -XX:+PrintGCTimeStamps 然后要根据优用的情~在优优优况没件优助可以下看看有有JVM的默优优和自优管理做的不优的地方可以优整~如-xmn 优Young的大小~-XX:MaxPermSize优持久代大小等。 2. JRockit 6.0 R27.2 但因优JDK5的优优优果优在不能优意~后来又优优了JRockit~优体效果要好些。 JRockit的特点是优优收集器是根据用优优垃圾决心的特征优优定收集算法的~参数如下 -XmsM -XmxM -Xgcprio:pausetime -Xpausetarget=200ms -XgcReport -XgcPause -Xverbose:memory 原文地址: Java GC 算法总总 总总总总总总总总总总总总总总总总总总总总总总当一个象不再被引用的候,内存回收它占的空, 以便空被后来的新象使用。除了放没用的象,垃圾总总总总总总总总总总总总总总总总总总总总总总总 收集也可以清除内存碎片。总总总总总 1、引用数法 总总总(Reference Counting Collector) 引用数法是唯一没有使用根集的垃圾回收的法,算法使用引用数器总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总来区分存活象和不再使用的象。一般来,堆中的总总总总总总总总总总总总总总总总总总总个象一每 个引用数器。当总总总总总总总总总总总总总总总总总总总总总总总总总一次建一个象并一个量,引用数器置每1。当象被任总总总总总总意量,引用数器总总总总总总总总总总总次加每1当象出了作用域后总总总总总总总总(总总总总总总总总象弃不再使用),引用数器减总总总总1,一旦引用数器总总总总0,象就足了垃圾收集的条件。总总总总总总总总总总总总总总 基于引用数器的垃圾收集器运行快,不会中断程序行,适宜地必总总总总总总总总总总总总总 总总总总总运行的 程序。但引用数器增加了程序行的,因总总总总总总总总总总总总总总总总总总总总总总总总次象新的量,数器加每1,而次有每总总总总总总总象出了作用域生,数器减1。    ps:用根集的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,既有向的方法,行内存象管理,可以消总总总总总总总总总总总总总总总总总除循引用的,就是如果有三个象相互引用,只要他和根集是不可达的,总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总gc也是可以回收他,根集的方法精度很高,但是效率低,数总总总总总总总总总总总总总总总总总总总总 器法精度低,无法理循引用,,但是行效率高,总总总总总总总总总总总总总总总总 2、tracing算法(Tracing Collector) tracing算法是了解决引用数法的而提出,它使用了根集的概念。基于总总总总总总总总总总总总总总总总总总总总总总总总总总总总tracing算法的垃圾收集器从根集始描,出哪些象可达,哪些象不总总总总总总总总总总总总总总总总总总总总可达,并用某方式可达象,例如总总总总总总总总总总总总总总总总总总总总总总个可达象置一个或每 多个位。在描程中,基于总总总总总总总总总总tracing算法的垃圾收集也称和清除总总总总总总 (mark-and-sweep)垃圾收集器。 3、compacting算法(Compacting Collector) 总总总总总总了解决堆碎片,基于tracing的垃圾回收吸收了Compacting算法的思想,在清除的总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总程中,算法将所有的象移到堆的一端,堆的另一端就成了一个相的空内存区,收集器会它移的所有象的所有引用行更新,使得些引用在新的位置能原来总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总总 总总的 象。在基于Compacting 算法的收集器的中,一般增加句柄和句柄总总总总总总总总总总总总总表。 4、copying算法(Coping Collector) 总总总总总总总总总总总总总总总总总总总总算法的提出是了克服句柄的和解决堆碎片的垃圾回 收。 将内存分两个区域总总总总总(from space和to space)。所有的象分配内存都分配到总总总总总总总总总总from space。在清理非活象段,把所有志活的象,总总总总总总总总总总总总总总总总总总copy到to space,之后清楚from space空。然后互总总总总总总from sapce和to space的身份。既原先的from space总成to sapce,原先的to space总成from space。次清理,重上述程。每总总总总总总 总点:copy算法不理会非活象,总总总总copy数量取决活象的数量。并且在总总总总总总总总总总总总总总总总copy的同,整理了总总总总总heap空,即,总总总总to space的空使用始是的,内存使总总总总总总总总总总总总总用效率得到提高。 缺点:划分from space和to space,内存的使用率是1,2。收集器必制所有的总总总总总总活象,增加了程序等待。总总总总总总总总总总总总总总总 5、generation算法(Generational Collector) 来自IBM的一数据:总总总总总总98,的java总总总总总总总总总总总总象,在建之后不久就成了非活象,只有总总总总总总2,的象,会在一直于活状。总总总总总总总总总总总总总总总总总 (1)young generation 年代分三个区。一个总总总总总总总总总Eden区,两个Survivor区。大部分象在总总总 Eden区中生成。当Eden区,存活的象将被制到总总总总总总总总总总总总总总Survivor区,两个中的一个,,当个总总Survivor区 总总总总总总总总总总总总总,此区的存活象将被制到另外一个Survivor区,当个总总Survivor区也了的总总总总候,从第一个Survivor区制来的并且此存活的象,将被制到总总总总总总总总总总总总总总总总总总总总总tenured generation。需要注意,Survivor的两个区是称的,没先后系,所以总总总总总总总总总总总总同一个区中可能同存在从总总总总Eden总总总总总总总总总总总制来象,和从前一个Survivor总总总总总总制来的象,而制到年老区的只有从第一个总总总总总总总总总总总总总Survivor去来的象。而且,总总总总总总总总总Survivor区有一个总总总总是空的。 young generation的gc称总minor gc。数次总总总总minor gc,依旧存活的象,将被移出总总总总总总总young generation,移到tenured generation (2)tenured generation 生命周期的象,入到总总总总总总总总总tenured generation。一般是多次总总总总minor gc,依旧存活总 的象,将移入到总总总总总总总tenured generation。,当然,在minor gc中如果存活的象的超总总总总总survivor的容量,放不下的象会直接移入到总总总总总总总总tenured generation, tenured generation的gc称总major gc,就是通常的总总full gc。 采用compactiion算法。由于tenured generaion区域比大,而且通常象生总总总总总总总总总总命周期都比,总总总compaction需要一定。所以部分的总总总总总总总总总gc总总总总总 比。 minor gc可能引总full gc。当eden,from space的空大于总总总tenured generation区的剩余空总总总,会引full gc。是总总总总总总总总总总悲算法,要确保eden,from space的象如果都存活,总总总总总总总总必有足的总总总总总tenured generation空存放些象。总总总总总总总总 (3)permanent generation 总总总总总总总总总总总区域比定,主要用于存放classloader信息,比如总总总总信息和method信息。 总于spring hibernate总总总总总总总总总总总总总总总总总总总总总总总些需要型支持的框架,个区域需要足的空。(总总部分空总总存在于方法区而不是heap中)。 6、adaptive算法(Adaptive Collector) 在特定的情况下,一些垃圾收集算法会于总总总总总总总总总其它算法。基于Adaptive算法的垃圾收集器就是总总总总总总总总总总总总总总总总总总总总总总总总总总控当前堆的使用情况,并将适当算法的垃圾收集器。
本文档为【GC算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_856983
暂无简介~
格式:doc
大小:36KB
软件:Word
页数:0
分类:生活休闲
上传时间:2018-02-05
浏览量:4