jvm垃圾回收原理g

上传人:san****019 文档编号:70382928 上传时间:2019-01-16 格式:PPT 页数:38 大小:729.01KB
返回 下载 相关 举报
jvm垃圾回收原理g_第1页
第1页 / 共38页
jvm垃圾回收原理g_第2页
第2页 / 共38页
jvm垃圾回收原理g_第3页
第3页 / 共38页
jvm垃圾回收原理g_第4页
第4页 / 共38页
jvm垃圾回收原理g_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《jvm垃圾回收原理g》由会员分享,可在线阅读,更多相关《jvm垃圾回收原理g(38页珍藏版)》请在金锄头文库上搜索。

1、Garbage Collection,Fenghua Jin 1st,May,2007,2,GC Description,Whats GC? GC用于跟踪内存中的对象,并回收那些不再被其他对象引用的对象。 内存中的对象类型 活动对象:即当前正在其他对象引用的对象。 非活动对象:这类对象不再被其他对象所引用,是孤立的对象。这类对象可以被回收,回收的堆空间用于分配给其它新创建的对象。,3,GC Description(2),GC何时会被触发 ? 系统空闲 GC线程的优先级低于系统应用线程,当系统中没有应用线程执行时,GC会被触发。 堆空间内存不足 当堆空间的内存不足以创建新对象时,GC会被触发。如

2、果第一GC仍不能获得足够的空间,第二次GC将被触发,如果这一次仍无法获取足够的空间, “Out of memory” 将被抛出。,4,GC Description(3),影响GC执行时间、频度的因素 JVM 堆(heap)空间的大小 堆空间设置偏大,完全GC执行比较耗时,但执行频率会降低。 堆空间设置恰好符合应用内存需求,完全GC执行很快,但执行会变得更频繁。,5,Heap Description,什么是堆(heap)空间 堆是java程序中对象存活的地方,其中包括: 活动对象 非活动对象,这类对象不再为应用程序中的任何指针能够到达。 剩余内存 堆空间中包含三种区域: 新生代(young ge

3、neration) 旧生代(tenured generation) 永生代(permanent generation),6,Heap Description(2),新生代(young generation) 新生代被分为两块: Eden、Survivor spaces Eden是为新对象分配的地方,很多对象分配后就变成非活动对象,即垃圾对象。这类对象具有“infant mortality”(幼儿死亡率)。如:方法体中的临时对象。 Survivor spaces也被称为两片生存空间,其中一片要保证任何时刻是空的,并作为下一个空间的目的地。当GC发生的时候,Eden中的存活对象被移入下一片空间。对

4、象在生存空间之间移动,直到它们老化(达到存活时间阀值),然后被移入旧生代。 Eden中对象满的时候,发生一次小收集(minor collection),小收集执行时间取决于Eden中对象的infant mortality。infant mortality高,执行就会很快。,7,Heap Description(3),旧生代(tenured generation) 该区域用于存放那些生命周期比较长的对象,Eden中的活动对象经过minor collection后,被复制到两片生存空间,当两片生存空间中的对象老化时,这些对象被移入旧生代。 旧生代中对象满的时候,发生一次大收集(major coll

5、ection),因为收集时要涉及所有存活对象,所以大收集的速度相对于小收集要慢很多。,8,Heap Description(4),下图展示了典型应用中,对象生存周期,9,Heap Description(5),永生代(permanent generation) 这个代比较特别,它负责保存反射对象。这些数据是虚拟机所需的数据,用来描述在Java语言中没有等同物的对象。例如,描述类与方法的对象存储在永生代中。,10,Heap Description(6),分代后的heap结构,11,Performance Tuning,下图显示了GC性能对整个系统性能的影响,12,Performance Tuni

6、ng(2),从上图可以看出: 如果系统花费在GC上的时间为1%,一旦系统跨越32个处理器时,系统的吞吐量(Throughput)将减少20% 如果系统花费在GC上的时间为10%,一旦系统跨越32个处理器时,系统的吞吐量(Throughput)将减少高达75% Note:所谓throughput,即系统用于处理非GC时间的比例。,13,Performance Tuning(3),Performance measurement Pause: the times when an application appears unresponsive because garbage collection i

7、s 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 measurement a very large young generation may maximize throughput,

8、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(6

9、4576K), 0.0457646 secs 196016K-133633K(261184K), 0.0459067 secs -XX:+PrintGCTimestamps Example: 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 secs Note: the output format of above flag is differen

10、t 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)

11、,Parameters which affect total heap size -XX:MinHeapFreeRatio= -XX:MaxHeapFreeRatio= -Xms -Xmx Note: JVM每次GC的时候,都会增加或收缩heap的大小,以保证free的空间的百分比在-XX:MinHeapFreeRatio和-XX:MaxHeapFreeRatio之间。同时建议-Xms和-Xmx设为相同值。,20,Performance Tuning(10),Parameters which affect young generation size -XX:NewRatio= -XX:NewS

12、ize= -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的比例,如SurvivorRat

13、ion=5,则意味着每个survivor占整个young generation的1/7(因为young generation中有两个survivor)。,21,Types of Collectors,Collectors in J2SE platform, version 1.4.2 Default collector Throughput collector Concurrent low pause collector Incremental low pause collector Note: 之前的介绍,都是基于default collector的。通常情况下,在使用其他三种collect

14、or之前,推荐使用default collector。如果调整heap size仍不满足系统某些要求,则根据这些需求,再选择相应的collector。,22,Throughput collector,Whats Throughput collector Throughput collector在young generation中使用并行版本收集器,而tenured generation中仍使用default collector。 When to use Throughput collector Throughput collector适用于应用跨越多CPU的场合。Default collect

15、or进行minor收集的时候,使用单线程,而Throughput collector使用多线程进行并行收集,这样可以减少收集时间。 How to use Throughput collector Add flag -XX:+UseParallelGC to command line。,23,Throughput collector(2),Performance improvement 对于单CPU的场合,因为并行收集的额外负荷(同步等), throughput collector性能不但得不到提升,反而不如default collector。 对于双CPU的场合,throughput coll

16、ector的性能基本和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:+AggressiveH

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号