|
1.1 LOW PAUSE Collector
1.1.1 Parallel Copying Collector
Figure 1 - Single Threaded & Parallel Collection
1:1的关系。
1.1.2 Concurrent Collector
Figure 2 - Concurrent Collection
1.2 Throughput Collectors
1.2.1 Parallel Scavenge Collector
Figure 3 - Parallel Collection
12G-80G heap.
8CPU +
1.2.2 Mark-Compact Collector
the default old generation collector
Figure 4 - Mark-Compact Collection 2、JDK 1.4.1 堆模型
2.1 Young Generation Heap
三代:
young generation:Eden, and Semi-spaces.
old generation
permanent generation.
Figure 5 - 堆模型
young generation各部分计算:
Eden = NewSize - ((NewSize / ( SurvivorRatio + 2)) * 2)
Semi-spaces=From space=To space=NewSize / ( SurvivorRatio + 2)
NewSize是young generation的总大小
SurvivorRatio:整数,1到更高。通过如下的参数进行定义:
-XX:NewSize -XX:MaxNewSize -XX:SurvivorRatio
例:
java -Xms512m -Xmx512m -XX:NewSize=128m -XX:MaxNewSize=128m \ -XX:SurvivorRatio=2 application
2.2 Old Generation Heap
老化堆,通过-Xms参数控制:Old Generation=Xms-young generation
例:
java -Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m \ -XX:SurvivorRatio=2 application
young generation:256 MB old generation:256 MB.
2.3 Permanent Generation Heap
存储类对象和相关的元数据:
缺省值为:4 MB,通过-XX:PermSize和-XX:MaxPermSize两个选项控制
例:
java -Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m \ -XX:SurvivorRatio=2 -XX:PermSize=64m -XX:MaxPermSize=64m application
缺省情况:
young Generation:2M Eden,64K semi-space
older generation heap:5MB,最大44MB
permanent generation:4MB.
使用-Xms和-Xmx参数只能调整old generation
例:
java -Xms128m -Xmx512m application
3、使用:XX参数来使用新的New Low Pause或Throughput Collectors
3.1 使用Low Pause Collectors
对于young generation, 可以使用-XX:+UseParNewGC来启用parallel copying collector,对于older generations可以使用-XX:+ UseConcMarkSweepGC来启用concurrent collector
例:
java -server -Xms512m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=64m \ -XX:SurvivorRatio=2 -XX:+ UseConcMarkSweepGC \ -XX:+UseParNewGC application
注意:
1、young generation缺省使用copying collector
2、在单位CPU机器上,使用了-XX+UseParNewGC,缺省的copy collector还是只有一个。但可以控制并行度
3.1.1 控制并行度
使用如下选项控制并行度:
-XX:ParallelGCThreads=并行度
缺省值为CPU的数量
例:
java -server -Xms512m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=64m \ -XX:SurvivorRatio=2 -XX:+UseParNewGC -XX:ParallelGCThreads=4 \ -XX:+UseConcMarkSweepGC application
3.1.2 在JDK1.4.1下模拟"promoteall"
"promoteall" 是jdk1.2.2的一个机制,将所有的对象都放到old grenration.使用如下的选项可以在1.4.1中模拟该机制:
-XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=20000
3.1.3 控制Concurrent collection 的启动
concurrent collector做为后台线程,在old generation使用率达到一定程度时启动,缺省值为68%,可以使用如下参数进行控制:
-XX:CMSInitiatingOccupancyFraction=百分比
3.2 使用Throughput Collectors
对于young generation,使用-XX:UseParallelGC来启用arallel scavenge collector, older generation缺省情况下就使用mark-compact collector
32位环境:
java -server -Xms3072m -Xmx3072m -XX:NewSize=2560m \ -XX:MaxNewSize=2560m XX:SurvivorRatio=2 \ -XX:+UseParallelGC application
64位环境:
java -server -d64 -Xms8192m -Xmx8192m -XX:NewSize=7168m \ -XX:MaxNewSize=7168m XX:SurvivorRatio=2 \ -XX:+UseParallelGC application
注意:
3.2.1 控制并行度
使用如下参数控制并行度:
-XX:ParallelGCThreads=希望的并行度
缺省情况下为CPU数量
3.2.2 Adaptive Sizing for Performance
Parallel scavenge collector可以使用如下参数自动分配young generation的相关参数-XX:+UseAdaptiveSizePolicy.例:
java -server -Xms3072m -XX:+UseParallelGC \ -XX:+UseAdaptiveSizePolicy application
4 jdk 1.4通过如下选项生成详细的GC信息
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC
-Xloggc:filename将gc的log放到一个单独的文件中。
5、使用 GC Analyzer Usage
使用方法: gc_analyze.pl [-d] <gclogfile> <CPS> <active_call_duration> <CPUs> <application_run_time_in_ms>
参数名 意义 -d 输出详细的分析与总结 gclogfile gc log文件 CPS 缺省50 active_call_duration 缺省为32000ms CPUs CPU数量,1个 applcation_run_Time_in_ms 运行时间
6 jdk1.4.1 Garbage Collector选项
Heap Layout
选项 缺省值 最大值 描述 -XX:NewSize 2Mb < 100 GB young generation初始值 -XX:MaxNewSize < 100 GB young generation最大值 -XX:SurvivorRatio WIN:8
SOL:64 <100000 控制eden space大小 -Xms 5 MB < 100 GB 缺省堆大小 -Xmx 4 MB < 100 GB 最大堆大小 -Xmn young generation的大小 -XX:MaxTenuringThreshold 31 Maximum number of times object is aged. Set this to 0 to enable promoteall. -XX:PermSize 4 MB < 10 GB permanent generation初始值 -XX:MaxPermSize 64 MB < 10 GB permanent generation最大值 -XX:NewRatio server:2
client:8 young generation 与old generation的比例 -XX:PretenureSizeThreshold 0 大于这个尺寸的对象直接分配在older generation -XX:+UseISM 使用ISM -XX:+UseMPSS 使用multiple page sizes -XX:+UseTLAB True on Solaris 使用本地线程对象分配 -XX:+AggressiveHeap Use for throughput applications with lots of CPUs and memory > 256MB. Turns on various flags, uses parallel scavenge collector for young generation, turns on Adaptive SizePolicy, increase sizes of TLAB and other data structures -XX:TargetSurvivorRatio 50 100 Desired percentage of survivor space used after a scavenge
附件: 您所在的用户组无法下载或查看附件
|