资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Garbage Collection,Fenghua Jin1st,May,2007,2,GC Description,Whats GC?GC用于跟踪内存中的对象,并回收那些不再被其他对象引用的对象。内存中的对象类型活动对象:即当前正在其他对象引用的对象。非活动对象:这类对象不再被其他对象所引用,是孤立的对象。这类对象可以被回收,回收的堆空间用于分配给其它新创建的对象。,3,GC Description(2),GC何时会被触发 ?系统空闲GC线程的优先级低于系统应用线程,当系统中没有应用线程执行时,GC会被触发。堆空间内存不足当堆空间的内存不足以创建新对象时,GC会被触发。如果第一GC仍不能获得足够的空间,第二次GC将被触发,如果这一次仍无法获取足够的空间, “Out of memory” 将被抛出。,4,GC Description(3),影响GC执行时间、频度的因素JVM 堆(heap)空间的大小堆空间设置偏大,完全GC执行比较耗时,但执行频率会降低。堆空间设置恰好符合应用内存需求,完全GC执行很快,但执行会变得更频繁。,5,Heap Description,什么是堆(heap)空间堆是java程序中对象存活的地方,其中包括:活动对象非活动对象,这类对象不再为应用程序中的任何指针能够到达。剩余内存堆空间中包含三种区域:新生代(young generation) 旧生代(tenured generation)永生代(permanent generation),6,Heap Description(2),新生代(young generation) 新生代被分为两块: Eden、Survivor spacesEden是为新对象分配的地方,很多对象分配后就变成非活动对象,即垃圾对象。这类对象具有“infant mortality”(幼儿死亡率)。如:方法体中的临时对象。Survivor spaces也被称为两片生存空间,其中一片要保证任何时刻是空的,并作为下一个空间的目的地。当GC发生的时候,Eden中的存活对象被移入下一片空间。对象在生存空间之间移动,直到它们老化(达到存活时间阀值),然后被移入旧生代。Eden中对象满的时候,发生一次小收集(minor collection),小收集执行时间取决于Eden中对象的infant mortality。infant mortality高,执行就会很快。,7,Heap Description(3),旧生代(tenured generation)该区域用于存放那些生命周期比较长的对象,Eden中的活动对象经过minor collection后,被复制到两片生存空间,当两片生存空间中的对象老化时,这些对象被移入旧生代。旧生代中对象满的时候,发生一次大收集(major collection),因为收集时要涉及所有存活对象,所以大收集的速度相对于小收集要慢很多。,8,Heap Description(4),下图展示了典型应用中,对象生存周期,9,Heap Description(5),永生代(permanent generation)这个代比较特别,它负责保存反射对象。这些数据是虚拟机所需的数据,用来描述在Java语言中没有等同物的对象。例如,描述类与方法的对象存储在永生代中。,10,Heap Description(6),分代后的heap结构,11,Performance Tuning,下图显示了GC性能对整个系统性能的影响,12,Performance Tuning(2),从上图可以看出:如果系统花费在GC上的时间为1%,一旦系统跨越32个处理器时,系统的吞吐量(Throughput)将减少20%如果系统花费在GC上的时间为10%,一旦系统跨越32个处理器时,系统的吞吐量(Throughput)将减少高达75%Note:所谓throughput,即系统用于处理非GC时间的比例。,13,Performance Tuning(3),Performance measurementPause: the times when an application appears unresponsive because garbage collection is occurring. Footprint: the working set of a process, measured in pages and cache lines .Promptness :the time between when an object becomes dead and when the memory becomes available.,14,Performance Tuning(4),How to leverage these measurementa very large young generation may maximize throughput, but does so at the expense of footprint, promptness, and pause times.a small young generation can minimize pause times at the expense of throughput,15,Performance Tuning(5),Example output of GC,16,Performance Tuning(6),To get detailed info of GC-XX:+PrintGCDetails Example: GC DefNew: 64575K-959K(64576K), 0.0457646 secs 196016K-133633K(261184K), 0.0459067 secs-XX:+PrintGCTimestampsExample: 111.042: GC 111.042: DefNew: 8128K-8128K(8128K), 0.0000505 secs111.042: Tenured: 18154K-2311K(24576K), 0.1290354 secs 26282K-2311K(32704K), 0.1293306 secsNote: the output format of above flag is different from each version of JVM.,17,Performance Tuning(7),Generation size diagram,18,Performance Tuning(8),Committed VS Virtual 每个代分成committed和virtual,JVM初始化的时候,所有heap被reserve。如果-Xms小于-Xmx,不是所有reserved的空间都立刻被commit,没有被commit的空间标志为virtual。随着应用对内存需求的增长,commited的heap慢慢会达到-Xmx指定的数值。,19,Performance Tuning(9),Parameters which affect total heap size-XX:MinHeapFreeRatio=-XX:MaxHeapFreeRatio=-Xms-XmxNote: JVM每次GC的时候,都会增加或收缩heap的大小,以保证free的空间的百分比在-XX:MinHeapFreeRatio和-XX:MaxHeapFreeRatio之间。同时建议-Xms和-Xmx设为相同值。,20,Performance Tuning(10),Parameters which affect young generation size-XX:NewRatio=-XX:NewSize=-XX:MaxNewSize=-XX:SurvivorRatio=Note: young generation的设置大点,小收集的执行频率降低,但大收集的执行频率会升高,可以依据应用中的对象生命周期进行young generation大小的调整。young generation的大小,可以由NewRatio控制,如NewRatio=4,这意味着young generation占整个heap的1/5。NewSize和MaxNewSize分别代表young generation的上下边界值。SurvivorRation用于指定survivor和eden的比例,如SurvivorRation=5,则意味着每个survivor占整个young generation的1/7(因为young generation中有两个survivor)。,21,Types of Collectors,Collectors in J2SE platform, version 1.4.2Default collectorThroughput collectorConcurrent low pause collectorIncremental low pause collectorNote: 之前的介绍,都是基于default collector的。通常情况下,在使用其他三种collector之前,推荐使用default collector。如果调整heap size仍不满足系统某些要求,则根据这些需求,再选择相应的collector。,22,Throughput collector,Whats Throughput collectorThroughput collector在young generation中使用并行版本收集器,而tenured generation中仍使用default collector。When to use Throughput collectorThroughput collector适用于应用跨越多CPU的场合。Default collector进行minor收集的时候,使用单线程,而Throughput collector使用多线程进行并行收集,这样可以减少收集时间。How to use Throughput collectorAdd flag -XX:+UseParallelGC to command line。,23,Throughput collector(2),Performance improvement对于单CPU的场合,因为并行收集的额外负荷(同步等), throughput collector性能不但得不到提升,反而不如default collector。对于双CPU的场合,throughput collector的性能基本和default collector相当。对于3CPU及以上的场合,throughput collector在收集性能上能得到一定的提升。,24,Throughput collector(3),GC threads in Throughput collector 默认情况下,throughput collector中GC线程数和系统的CPU数相当。但GC线程数可通过下面的flag进行控制, -XX:ParallelGCThreads=GC statistics Through collector收集时的统计数据包括:收集时间、收集速率、剩余heap大小等。可以根据这些数据调整young generation、tenured generation的大小来满足系统要求。下面的flag用于控制这些统计数据是否输出,默认为on, -XX:+UseAdaptiveSizePolicy,25,Throughput collector(4),Self tuning by Throughput collector-XX:+AggressiveHeap 自检物理机器的内存、CPU数,然后自行调整一些参数,以优化那些长期运行、大量内存分配需求的任务。这个flag比较适合那些大内存、多CPU的系统,使用AggressiveHeap,必须保证物理内存256M,初始化的heap大小依赖于物理内存的大小。后续内存的使用,会尽可能多的使用物理内存(i.e., it attempt to use heaps nearly as large as the total physical memory )。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号