JBossAS性能调优和瘦身系列(2):JVM

本文提供了关于如何根据机器配置和内存大小调整JVM垃圾收集性能的建议,包括选择合适的虚拟机、使用64位支持、调整堆空间大小、选择正确的垃圾收集器策略等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

l         根据机器配置和内存大小调整虚拟机的垃圾收集性能或者调整JDK5的垃圾收集性能;

<o:p> </o:p>

l         x86硬件使用Bea JRockit虚拟机;

<o:p> </o:p>

l         使用64位的机器和支持64位的虚拟机来提供比通常2-4GB更大的堆,近来Sparc/SolarisSolaris 9(或者更高版本)、Itanium + JDK1.4Linux x64 + JDK5已经能够提供64位支持;

<o:p> </o:p>

l         如果不使用的32位地址(2-4GB)以上的堆空间,不要使用-d6464位支持的选项);使用64位地址,在完成相同任务的情况下需要更多的内存,而且不能够为应用带来任何好处;

<o:p> </o:p>

l         避免堆空间过大或过小(不能明确说明堆空间多大合适,因为这依赖于实际情况)。堆空间的大小影响代式垃圾的收集和扫描堆的时间;在堆空间较小的情况下,很难有效地进行性能调优(即使您的应用仅使用<st1:chmetcnv unitname="m" sourcevalue="200" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">200M</st1:chmetcnv>内存,如果采用并行垃圾收集策略和CMS,仍然需要使用512MB以上的堆空间),但是过大的堆空间将会在垃圾收集时需要更长的时间来扫描堆空间;

<o:p> </o:p>

l         避免使用Sun 1.4虚拟机;JDK5特别是在垃圾收集方面比1.4有显著的改善,JRockit虚拟机在x86平台上性能非常好;

<o:p> </o:p>

l         使用-server选项时,要么使用-XX:TheadStackSize=128kSolaris),要么使用-Xss128k(其它平台),在Solaris上,-Xss128k没有任何作用(you can only set Larger thread stack size);这些设置将是线程使用更少的内存作为栈,从而能够创建更多的线程,但是在运行复杂的递归代码时栈空间的减少将可能导致栈溢出;当然,使用128k的栈也无可厚非;

<o:p> </o:p>

l         理解垃圾收集器之间的区别,根据情况进行调整;并进行负载测试(OpenSTAJMeter等)来确保选择合适的垃圾收集器;

<o:p> </o:p>

l         最好使用多余2个处理器的多处理器计算机,并采用并行和并发的垃圾收集选项来获得最佳性能和更高的垃圾收集吞吐量;但是只有真正理解了垃圾收集器的工作原理,才能做出合适的调整;JDK5完全能够自我调整;

<o:p> </o:p>

l         调整JDK1.4NewSize的缺省值,经验规则(原文:bad rule of thumb):设置为小于20%比较好;设置为大于20%将非常危险,因为它可能引起虚拟机错乱地进行完整的垃圾收集(full garbage collection,并且不会休眠或释放足够的空闲内存。JDK5似乎已经修正了这个Bug,而且在缺省值的设置上更加合理;

<o:p> </o:p>

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值