1.JVM
![](/icons/70677de.gif)
gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用
![](/icons/70677de.gif)
对象所占用
![](/icons/70677de.gif)
内存
![](/icons/70677dou2.gif)
java语言并不要求jvm有gc
![](/icons/70677dou.gif)
也没有规定gc如何工作
![](/icons/70677dou2.gif)
不过常用
![](/icons/70677de.gif)
jvm都有gc
![](/icons/70677dou.gif)
而且大多数gc都使用类似
![](/icons/70677de.gif)
算法管理内存和执行收集操作
![](/icons/70677dou2.gif)
在充分理解了垃圾收集算法和执行过程后
![](/icons/70677dou.gif)
才能有效
![](/icons/70677de.gif)
优化它
![](/icons/70677de.gif)
性能
![](/icons/70677dou2.gif)
有些垃圾收集专用于特殊
![](/icons/70677de.gif)
应用
![](/icons/70677chengxu.gif)
![](/icons/70677dou2.gif)
比如
![](/icons/70677dou.gif)
实时应用
![](/icons/70677chengxu.gif)
主要是为了避免垃圾收集中断
![](/icons/70677dou.gif)
而大多数OLTP应用
![](/icons/70677chengxu.gif)
则注重整体效率
![](/icons/70677dou2.gif)
理解了应用
![](/icons/70677chengxu.gif)
![](/icons/70677de.gif)
工作负荷和jvm支持
![](/icons/70677de.gif)
垃圾收集算法
![](/icons/70677dou.gif)
便可以进行优化配置垃圾收集器
![](/icons/70677dou2.gif)
垃圾收集
![](/icons/70677de.gif)
目
![](/icons/70677de.gif)
在于清除不再使用
![](/icons/70677de.gif)
对象
![](/icons/70677dou2.gif)
gc通过确定对象是否被活动对象引用来确定是否收集该对象
![](/icons/70677dou2.gif)
gc首先要判断该对象是否是时候可以收集
![](/icons/70677dou2.gif)
两种常用
![](/icons/70677de.gif)
思路方法是引用计数和对象引用遍历
![](/icons/70677dou2.gif)
1.1.引用计数 引用计数存储对特定对象
![](/icons/70677de.gif)
所有引用数
![](/icons/70677dou.gif)
也就是说
![](/icons/70677dou.gif)
当应用
![](/icons/70677chengxu.gif)
创建引用以及引用超出范围时
![](/icons/70677dou.gif)
jvm必须适当增减引用数
![](/icons/70677dou2.gif)
当某对象
![](/icons/70677de.gif)
引用数为0时
![](/icons/70677dou.gif)
便可以进行垃圾收集
![](/icons/70677dou2.gif)
1.2.对象引用遍历 早期
![](/icons/70677de.gif)
jvm使用引用计数
![](/icons/70677dou.gif)
现在大多数jvm采用对象引用遍历
![](/icons/70677dou2.gif)
对象引用遍历从
![](/icons/70677yi.gif)
组对象开始
![](/icons/70677dou.gif)
沿着整个对象图上
![](/icons/70677de.gif)
每条链接
![](/icons/70677dou.gif)
递归确定可到达(reachable)
![](/icons/70677de.gif)
对象
![](/icons/70677dou2.gif)
如果某对象不能从这些根对象
![](/icons/70677de.gif)
![](/icons/70677yi.gif)
个(至少
![](/icons/70677yi.gif)
个)到达
![](/icons/70677dou.gif)
则将它作为垃圾收集
![](/icons/70677dou2.gif)
在对象遍历阶段
![](/icons/70677dou.gif)
gc必须记住哪些对象可以到达
![](/icons/70677dou.gif)
以便删除不可到达
![](/icons/70677de.gif)
对象
![](/icons/70677dou.gif)
这称为标记(marking)对象
![](/icons/70677dou2.gif)
下
![](/icons/70677yi.gif)
步
![](/icons/70677dou.gif)
gc要删除不可到达
![](/icons/70677de.gif)
对象
![](/icons/70677dou2.gif)
删除时
![](/icons/70677dou.gif)
有些gc只是简单
![](/icons/70677de.gif)
扫描堆栈
![](/icons/70677dou.gif)
删除未标记
![](/icons/70677de.gif)
未标记
![](/icons/70677de.gif)
对象
![](/icons/70677dou.gif)
并释放它们
![](/icons/70677de.gif)
内存以生成新
![](/icons/70677de.gif)
对象
![](/icons/70677dou.gif)
这叫做清除(sweeping)
![](/icons/70677dou2.gif)
这种思路方法
![](/icons/70677de.gif)
问题在于内存会分成好多小段
![](/icons/70677dou.gif)
而它们不足以用于新
![](/icons/70677de.gif)
对象
![](/icons/70677dou.gif)
但是组合起来却很大
![](/icons/70677dou2.gif)
因此
![](/icons/70677dou.gif)
许多gc可以重新组织内存中
![](/icons/70677de.gif)
对象
![](/icons/70677dou.gif)
并进行压缩(compact)
![](/icons/70677dou.gif)
形成可利用
![](/icons/70677de.gif)
空间
![](/icons/70677dou2.gif)
为此
![](/icons/70677dou.gif)
gc需要停止其他
![](/icons/70677de.gif)
活动活动
![](/icons/70677dou2.gif)
这种思路方法意味着所有和应用
![](/icons/70677chengxu.gif)
相关
![](/icons/70677de.gif)
工作停止
![](/icons/70677dou.gif)
只有gc运行
![](/icons/70677dou2.gif)
结果
![](/icons/70677dou.gif)
在响应期间增减了许多混杂请求
![](/icons/70677dou2.gif)
另外
![](/icons/70677dou.gif)
更复杂
![](/icons/70677de.gif)
gc不断增加或同时运行以减少或者清除应用
![](/icons/70677chengxu.gif)
![](/icons/70677de.gif)
中断
![](/icons/70677dou2.gif)
有
![](/icons/70677de.gif)
gc使用单线程完成这项工作
![](/icons/70677dou.gif)
有
![](/icons/70677de.gif)
则采用多线程以增加效率
![](/icons/70677dou2.gif)
2.几种垃圾回收机制 2.1.标记-清除收集器 这种收集器首先遍历对象图并标记可到达
![](/icons/70677de.gif)
对象
![](/icons/70677dou.gif)
然后扫描堆栈以寻找未标记对象并释放它们
![](/icons/70677de.gif)
内存
![](/icons/70677dou2.gif)
这种收集器
![](/icons/70677yi.gif)
般使用单线程工作并停止其他操作
![](/icons/70677dou2.gif)
2.2.标记-压缩收集器 有时也叫标记-清除-压缩收集器
![](/icons/70677dou.gif)
和标记-清除收集器有相同
![](/icons/70677de.gif)
标记阶段
![](/icons/70677dou2.gif)
在第 2阶段
![](/icons/70677dou.gif)
则把标记对象复制到堆栈
![](/icons/70677de.gif)
新域中以便压缩堆栈
![](/icons/70677dou2.gif)
这种收集器也停止其他操作
![](/icons/70677dou2.gif)
2.3.复制收集器 这种收集器将堆栈分为两个域
![](/icons/70677dou.gif)
常称为半空间
![](/icons/70677dou2.gif)
每次仅使用
![](/icons/70677yi.gif)
半
![](/icons/70677de.gif)
空间
![](/icons/70677dou.gif)
jvm生成
![](/icons/70677de.gif)
新对象则放在另
![](/icons/70677yi.gif)
半空间中
![](/icons/70677dou2.gif)
gc运行时
![](/icons/70677dou.gif)
它把可到达对象复制到另
![](/icons/70677yi.gif)
半空间
![](/icons/70677dou.gif)
从而压缩了堆栈
![](/icons/70677dou2.gif)
这种思路方法适用于短生存期
![](/icons/70677de.gif)
对象
![](/icons/70677dou.gif)
持续复制长生存期
![](/icons/70677de.gif)
对象则导致效率降低
![](/icons/70677dou2.gif)
2.4.增量收集器 增量收集器把堆栈分为多个域
![](/icons/70677dou.gif)
每次仅从
![](/icons/70677yi.gif)
个域收集垃圾
![](/icons/70677dou2.gif)
这会造成较小
![](/icons/70677de.gif)
应用
![](/icons/70677chengxu.gif)
中断
![](/icons/70677dou2.gif)
2.5.分代收集器 这种收集器把堆栈分为两个或多个域
![](/icons/70677dou.gif)
用以存放区别寿命
![](/icons/70677de.gif)
对象
![](/icons/70677dou2.gif)
jvm生成
![](/icons/70677de.gif)
新对象
![](/icons/70677yi.gif)
般放在其中
![](/icons/70677de.gif)
某个域中
![](/icons/70677dou2.gif)
过
![](/icons/70677yi.gif)
段时间
![](/icons/70677dou.gif)
继续存在
![](/icons/70677de.gif)
对象将获得使用期并转入更长寿命
![](/icons/70677de.gif)
域中
![](/icons/70677dou2.gif)
分代收集器对区别
![](/icons/70677de.gif)
域使用区别
![](/icons/70677de.gif)
算法以优化性能
![](/icons/70677dou2.gif)
2.6.并发收集器 并发收集器和应用
![](/icons/70677chengxu.gif)
同时运行
![](/icons/70677dou2.gif)
这些收集器在某点上(比如压缩时)
![](/icons/70677yi.gif)
般都不得不停止其他操作以完成特定
![](/icons/70677de.gif)
任务
![](/icons/70677dou.gif)
但是
![](/icons/70677yinwei.gif)
其他应用
![](/icons/70677chengxu.gif)
可进行其他
![](/icons/70677de.gif)
后台操作
![](/icons/70677dou.gif)
所以中断其他处理
![](/icons/70677de.gif)
实际时间大大降低
![](/icons/70677dou2.gif)
2.7.并行收集器 并行收集器使用某种传统
![](/icons/70677de.gif)
算法并使用多线程并行
![](/icons/70677de.gif)
执行它们
![](/icons/70677de.gif)
工作
![](/icons/70677dou2.gif)
在多cpu机器上使用多线程技术可以显著
![](/icons/70677de.gif)
提高java应用
![](/icons/70677chengxu.gif)
![](/icons/70677de.gif)
可扩展性
![](/icons/70677dou2.gif)
3.Sun HotSpot 1.4.1 JVM堆大小
![](/icons/70677de.gif)
调整 Sun HotSpot 1.4.1使用分代收集器
![](/icons/70677dou.gif)
它把堆分为 3个主要
![](/icons/70677de.gif)
域:新域、旧域以及永久域
![](/icons/70677dou2.gif)
Jvm生成
![](/icons/70677de.gif)
所有新对象放在新域中
![](/icons/70677dou2.gif)
![](/icons/70677yi.gif)
旦对象经历了
![](/icons/70677yi.gif)
定数量
![](/icons/70677de.gif)
垃圾收集循环后
![](/icons/70677dou.gif)
便获得使用期并进入旧域
![](/icons/70677dou2.gif)
在永久域中jvm则存储
![](/icons/70677class.gif)
和method对象
![](/icons/70677dou2.gif)
就配置而言
![](/icons/70677dou.gif)
永久域是
![](/icons/70677yi.gif)
个独立域并且不认为是堆
![](/icons/70677de.gif)
![](/icons/70677yi.gif)
部分
![](/icons/70677dou2.gif)
下面介绍如何控制这些域
![](/icons/70677de.gif)
大小
![](/icons/70677dou2.gif)
可使用-Xms和-Xmx 控制整个堆
![](/icons/70677de.gif)
原始大小或最大值
![](/icons/70677dou2.gif)
下面
![](/icons/70677de.gif)
命令是把
![](/icons/70677chushi.gif)
大小设置为128M: java –Xms128m –Xmx256m为控制新域
![](/icons/70677de.gif)
大小
![](/icons/70677dou.gif)
可使用-XX:NewRatio设置新域在堆中所占
![](/icons/70677de.gif)
比例
![](/icons/70677dou2.gif)
下面
![](/icons/70677de.gif)
命令把整个堆设置成128m
![](/icons/70677dou.gif)
新域比率设置成3
![](/icons/70677dou.gif)
即新域和旧域比例为1:3
![](/icons/70677dou.gif)
新域为堆
![](/icons/70677de.gif)
1/4或32M: java –Xms128m –Xmx128m –XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize设置新域
![](/icons/70677de.gif)
![](/icons/70677chushi.gif)
值和最大值
![](/icons/70677dou2.gif)
下面
![](/icons/70677de.gif)
命令把新域
![](/icons/70677de.gif)
![](/icons/70677chushi.gif)
值和最大值设置成64m: java –Xms256m –Xmx256m –Xmn64m 永久域默认大小为4m
![](/icons/70677dou2.gif)
运行
![](/icons/70677chengxu.gif)
时
![](/icons/70677dou.gif)
jvm会调整永久域
![](/icons/70677de.gif)
大小以满足需要
![](/icons/70677dou2.gif)
每次调整时
![](/icons/70677dou.gif)
jvm会对堆进行
![](/icons/70677yi.gif)
次完全
![](/icons/70677de.gif)
垃圾收集
![](/icons/70677dou2.gif)
使用-XX:MaxPerSize标志来增加永久域搭大小
![](/icons/70677dou2.gif)
在WebLogic Server应用
![](/icons/70677chengxu.gif)
加载较多类时
![](/icons/70677dou.gif)
经常需要增加永久域
![](/icons/70677de.gif)
最大值
![](/icons/70677dou2.gif)
当jvm加载类时
![](/icons/70677dou.gif)
永久域中
![](/icons/70677de.gif)
对象急剧增加
![](/icons/70677dou.gif)
从而使jvm不断调整永久域大小
![](/icons/70677dou2.gif)
为了避免调整
![](/icons/70677dou.gif)
可使用-XX:PerSize标志设置
![](/icons/70677chushi.gif)
值
![](/icons/70677dou2.gif)
下面把永久域
![](/icons/70677chushi.gif)
值设置成32m
![](/icons/70677dou.gif)
最大值设置成64m
![](/icons/70677dou2.gif)
java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m 默认状态下
![](/icons/70677dou.gif)
HotSpot在新域中使用复制收集器
![](/icons/70677dou2.gif)
该域
![](/icons/70677yi.gif)
般分为 3个部分
![](/icons/70677dou2.gif)
第
![](/icons/70677yi.gif)
部分为Eden
![](/icons/70677dou.gif)
用于生成新
![](/icons/70677de.gif)
对象
![](/icons/70677dou2.gif)
另两部分称为救助空间
![](/icons/70677dou.gif)
当Eden充满时
![](/icons/70677dou.gif)
收集器停止应用
![](/icons/70677chengxu.gif)
![](/icons/70677dou.gif)
把所有可到达对象复制到当前
![](/icons/70677de.gif)
from救助空间
![](/icons/70677dou.gif)
![](/icons/70677yi.gif)
旦当前
![](/icons/70677de.gif)
from救助空间充满
![](/icons/70677dou.gif)
收集器则把可到达对象复制到当前
![](/icons/70677de.gif)
to救助空间
![](/icons/70677dou2.gif)
From和to救助空间互换角色
![](/icons/70677dou2.gif)
维持活动
![](/icons/70677de.gif)
对象将在救助空间不断复制
![](/icons/70677dou.gif)
直到它们获得使用期并转入旧域
![](/icons/70677dou2.gif)
使用-XX:SurvivorRatio可控制新域子空间
![](/icons/70677de.gif)
大小
![](/icons/70677dou2.gif)
同NewRation
![](/icons/70677yi.gif)
样
![](/icons/70677dou.gif)
SurvivorRation规定某救助域和Eden空间
![](/icons/70677de.gif)
比值
![](/icons/70677dou2.gif)
比如
![](/icons/70677dou.gif)
以下命令把新域设置成64m
![](/icons/70677dou.gif)
Eden占32m
![](/icons/70677dou.gif)
每个救助域各占16m: java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2 如前所述
![](/icons/70677dou.gif)
默认状态下HotSpot对新域使用复制收集器
![](/icons/70677dou.gif)
对旧域使用标记-清除-压缩收集器
![](/icons/70677dou2.gif)
在新域中使用复制收集器有很多意义
![](/icons/70677dou.gif)
![](/icons/70677yinwei.gif)
应用
![](/icons/70677chengxu.gif)
生成
![](/icons/70677de.gif)
大部分对象是短寿命
![](/icons/70677de.gif)
![](/icons/70677dou2.gif)
理想状态下
![](/icons/70677dou.gif)
所有过渡对象在移出Eden空间时将被收集
![](/icons/70677dou2.gif)
如果能够这样
![](/icons/70677de.gif)
话
![](/icons/70677dou.gif)
并且移出Eden空间
![](/icons/70677de.gif)
对象是长寿命
![](/icons/70677de.gif)
![](/icons/70677dou.gif)
那么理论上可以立即把它们移进旧域
![](/icons/70677dou.gif)
避免在救助空间反复复制
![](/icons/70677dou2.gif)
但是
![](/icons/70677dou.gif)
应用
![](/icons/70677chengxu.gif)
不能适合这种理想状态
![](/icons/70677dou.gif)
![](/icons/70677yinwei.gif)
它们有
![](/icons/70677yi.gif)
小部分中长寿命
![](/icons/70677de.gif)
对象
![](/icons/70677dou2.gif)
最好是保持这些中长寿命
![](/icons/70677de.gif)
对象并放在新域中
![](/icons/70677dou.gif)
![](/icons/70677yinwei.gif)
复制小部分
![](/icons/70677de.gif)
对象总比压缩旧域廉价
![](/icons/70677dou2.gif)
为控制新域中对象
![](/icons/70677de.gif)
复制
![](/icons/70677dou.gif)
可用-XX:TargetSurvivorRatio控制救助空间
![](/icons/70677de.gif)
比例(该值是设置救助空间
![](/icons/70677de.gif)
使用比例
![](/icons/70677dou2.gif)
如救助空间位1M
![](/icons/70677dou.gif)
该值50表示可用500K)
![](/icons/70677dou2.gif)
该值是
![](/icons/70677yi.gif)
个百分比
![](/icons/70677dou.gif)
默认值是50
![](/icons/70677dou2.gif)
当较大
![](/icons/70677de.gif)
堆栈使用较低
![](/icons/70677de.gif)
sruvivorratio时
![](/icons/70677dou.gif)
应增加该值到80至90
![](/icons/70677dou.gif)
以更好利用救助空间
![](/icons/70677dou2.gif)
用-XX:maxtenuring threshold可控制上限
![](/icons/70677dou2.gif)
为放置所有
![](/icons/70677de.gif)
复制全部发生以及希望对象从eden扩展到旧域
![](/icons/70677dou.gif)
可以把MaxTenuring Threshold设置成0
![](/icons/70677dou2.gif)
设置完成后
![](/icons/70677dou.gif)
实际上就不再使用救助空间了
![](/icons/70677dou.gif)
因此应把SurvivorRatio设成最大值以最大化Eden空间
![](/icons/70677dou.gif)
设置如下: java … -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio=50000 … 4.BEA JRockit JVM
![](/icons/70677de.gif)
使用 Bea WebLogic 8.1使用
![](/icons/70677de.gif)
新
![](/icons/70677de.gif)
JVM用于Intel平台
![](/icons/70677dou2.gif)
在Bea安装完毕
![](/icons/70677de.gif)
目录下可以看到有
![](/icons/70677yi.gif)
个类似于jrockit81sp1_141_03
![](/icons/70677de.gif)
文件夹
![](/icons/70677dou2.gif)
这就是Bea新JVM所在目录
![](/icons/70677dou2.gif)
区别于HotSpot把Java字节码编译成本地码
![](/icons/70677dou.gif)
它预先编译成类
![](/icons/70677dou2.gif)
JRockit还提供了更细致
![](/icons/70677de.gif)
功能用以观察JVM
![](/icons/70677de.gif)
运行状态
![](/icons/70677dou.gif)
主要是独立
![](/icons/70677de.gif)
GUI控制台(只能适用于使用Jrockit才能使用jrockit81sp1_141_03自带
![](/icons/70677de.gif)
console监控
![](/icons/70677yi.gif)
些cpu及memory参数)或者WebLogic Server控制台
![](/icons/70677dou2.gif)
Bea JRockit JVM支持4种垃圾收集器: 4.1.1.分代复制收集器 它和默认
![](/icons/70677de.gif)
分代收集器工作策略类似
![](/icons/70677dou2.gif)
对象在新域中分配
![](/icons/70677dou.gif)
即JRockit文档中
![](/icons/70677de.gif)
nursery
![](/icons/70677dou2.gif)
这种收集器最适合单cpu机上小型堆操作
![](/icons/70677dou2.gif)
4.1.2.单空间并发收集器 该收集器使用完整堆
![](/icons/70677dou.gif)
并和背景线程共同工作
![](/icons/70677dou2.gif)
尽管这种收集器可以消除中断
![](/icons/70677dou.gif)
但是收集器需花费较长
![](/icons/70677de.gif)
时间寻找死对象
![](/icons/70677dou.gif)
而且处理应用
![](/icons/70677chengxu.gif)
时收集器经常运行
![](/icons/70677dou2.gif)
如果处理器不能应付应用
![](/icons/70677chengxu.gif)
产生
![](/icons/70677de.gif)
垃圾
![](/icons/70677dou.gif)
它会中断应用
![](/icons/70677chengxu.gif)
并关闭收集
![](/icons/70677dou2.gif)
分代并发收集器 这种收集器在护理域使用排它复制收集器
![](/icons/70677dou.gif)
在旧域中则使用并发收集器
![](/icons/70677dou2.gif)
由于它比单空间共同发生收集器中断频繁
![](/icons/70677dou.gif)
因此它需要较少
![](/icons/70677de.gif)
内存
![](/icons/70677dou.gif)
应用
![](/icons/70677chengxu.gif)
![](/icons/70677de.gif)
运行效率也较高
![](/icons/70677dou.gif)
注意
![](/icons/70677dou.gif)
过小
![](/icons/70677de.gif)
护理域可以导致大量
![](/icons/70677de.gif)
临时对象被扩展到旧域中
![](/icons/70677dou2.gif)
这会造成收集器超负荷运作
![](/icons/70677dou.gif)
甚至采用排它性工作方式完成收集
![](/icons/70677dou2.gif)
4.1.3.并行收集器 该收集器也停止其他进程
![](/icons/70677de.gif)
工作
![](/icons/70677dou.gif)
但使用多线程以加速收集进程
![](/icons/70677dou2.gif)
尽管它比其他
![](/icons/70677de.gif)
收集器易于引起长时间
![](/icons/70677de.gif)
中断
![](/icons/70677dou.gif)
但
![](/icons/70677yi.gif)
般能更好
![](/icons/70677de.gif)
利用内存
![](/icons/70677dou.gif)
![](/icons/70677chengxu.gif)
效率也较高
![](/icons/70677dou2.gif)
默认状态下
![](/icons/70677dou.gif)
JRockit使用分代并发收集器
![](/icons/70677dou2.gif)
要改变收集器
![](/icons/70677dou.gif)
可使用-Xgc:
![](/icons/70677dou.gif)
对应 4个收集器分别为gencopy
![](/icons/70677dou.gif)
singlecon
![](/icons/70677dou.gif)
gencon以及parallel
![](/icons/70677dou2.gif)
可使用-Xms和-Xmx设置堆
![](/icons/70677de.gif)
![](/icons/70677chushi.gif)
大小和最大值
![](/icons/70677dou2.gif)
要设置护理域
![](/icons/70677dou.gif)
则使用-Xns:java –jrockit –Xms512m –Xmx512m –Xgc:gencon –Xns128m…尽管JRockit支持-verbose:gc开关
![](/icons/70677dou.gif)
但它输出
![](/icons/70677de.gif)
信息会因收集器
![](/icons/70677de.gif)
区别而异
![](/icons/70677dou2.gif)
JRockit还支持memory、load和codegen
![](/icons/70677de.gif)
输出
![](/icons/70677dou2.gif)
注意 :如果 使用JRockit JVM
![](/icons/70677de.gif)
话还可以使用WLS自带
![](/icons/70677de.gif)
console(C:\bea\jrockit81sp1_141_03\bin下)来监控
![](/icons/70677yi.gif)
些数据
![](/icons/70677dou.gif)
如cpu
![](/icons/70677dou.gif)
memery等
![](/icons/70677dou2.gif)
要想能构监控必须在启动服务时startWeblogic.cmd中加入-Xmanagement参数
![](/icons/70677dou2.gif)
5.如何从JVM中获取信息来进行调整 -verbose.gc开关可显示gc
![](/icons/70677de.gif)
操作内容
![](/icons/70677dou2.gif)
打开它
![](/icons/70677dou.gif)
可以显示最忙和最空闲收集行为发生
![](/icons/70677de.gif)
时间、收集前后
![](/icons/70677de.gif)
内存大小、收集需要
![](/icons/70677de.gif)
时间等
![](/icons/70677dou2.gif)
打开-xx:+ pr
![](/icons/70677int.gif)
gcdetails开关
![](/icons/70677dou.gif)
可以详细了解gc中
![](/icons/70677de.gif)
变化
![](/icons/70677dou2.gif)
打开-XX: + Pr
![](/icons/70677int.gif)
GCTimeStamps开关
![](/icons/70677dou.gif)
可以了解这些垃圾收集发生
![](/icons/70677de.gif)
时间
![](/icons/70677dou.gif)
自jvm启动以后以秒计量
![](/icons/70677dou2.gif)
最后
![](/icons/70677dou.gif)
通过-xx: + Pr
![](/icons/70677int.gif)
HeapAtGC开关了解堆
![](/icons/70677de.gif)
更详细
![](/icons/70677de.gif)
信息
![](/icons/70677dou2.gif)
为了了解新域
![](/icons/70677de.gif)
情况
![](/icons/70677dou.gif)
可以通过-XX:=Pr
![](/icons/70677int.gif)
TenuringDistribution开关了解获得使用期
![](/icons/70677de.gif)
对象权
![](/icons/70677dou2.gif)
6.Pdm系统JVM调整 6.1.服务器:前提内存1G 单CPU 可通过如下参数进行调整:-server 启用服务器模式(如果CPU多
![](/icons/70677dou.gif)
服务器机建议使用此项) -Xms,-Xmx
![](/icons/70677yi.gif)
般设为同样大小
![](/icons/70677dou2.gif)
800m -Xmn 是将NewSize和MaxNewSize设为
![](/icons/70677yi.gif)
致
![](/icons/70677dou2.gif)
320m -XX:PerSize 64m -XX:NewSize 320m 此值设大可调大新对象区
![](/icons/70677dou.gif)
减少Full GC次数 -XX:MaxNewSize 320m -XX:NewRato NewSize设了可不设
![](/icons/70677dou2.gif)
4 -XX: SurvivorRatio 4 -XX:userParNewGC 可用来设置并行收集 -XX:ParallelGCThreads 可用来增加并行度 4 -XXUseParallelGC 设置后可以使用并行清除收集器 -XX:UseAdaptiveSizePolicy 和上面
![](/icons/70677yi.gif)
个联合使用效果更好
![](/icons/70677dou.gif)
利用它可以自动优化新域大小以及救助空间比值 6.2.客户机:通过在JNLP文件中设置参数来调整客户端JVM JNLP中参数:initial-heap-size和max-heap-size 这可以在framework
![](/icons/70677de.gif)
RequestManager中生成JNLP文件时加入上述参数
![](/icons/70677dou.gif)
但是这些值是要求根据客户机
![](/icons/70677de.gif)
硬件状态变化
![](/icons/70677de.gif)
(如客户机
![](/icons/70677de.gif)
内存大小等)
![](/icons/70677dou2.gif)
建议这两个参数值设为客户机可用内存
![](/icons/70677de.gif)
60%(有待测试)
![](/icons/70677dou2.gif)
为了在动态生成JNLP时以上两个参数值能够随客户机区别而区别
![](/icons/70677dou.gif)
可靠虑获得客户机系统信息并将这些嵌到首页index.jsp中作为连接请求
![](/icons/70677de.gif)
参数
![](/icons/70677dou2.gif)
在设置了上述参数后可以通过Visualgc 来观察垃圾回收
![](/icons/70677de.gif)
![](/icons/70677yi.gif)
些参数状态
![](/icons/70677dou.gif)
再做相应
![](/icons/70677de.gif)
调整来改善性能
![](/icons/70677dou2.gif)
![](/icons/70677yi.gif)
般
![](/icons/70677de.gif)
标准是减少fullgc
![](/icons/70677de.gif)
次数
![](/icons/70677dou.gif)
最好硬件支持使用并行垃圾回收(要求多CPU)
TAG:
JVM
机制
垃圾
详解