JVM 調優 技巧

JVM 調優 技巧

博客分類: jdk
1.升級 JVM 版本。如果能使用64-bit,使用64-bit JVM。
          
            基本上沒什麼好解釋的,很簡單將JVM升級到最新的版本。如果你還是使用JDK1.4甚至是更早的JVM,那你首先要做的就是升級。因爲JVM從1.4- >1.5->1.6可不是僅僅的版本號升級,或者僅僅往裏面加了一堆新的語言特性,這麼簡單。而是真正在JVM做了重大的改進,每次版本升級,都有巨大的性能升級。尤其是SUN認識到java是知己的全部的時候(誇張點,但連股票號都改成JAVA了,呵呵)。如果你經常逛SUN 的JVM論壇,你就會發現實際上JVM上的毛病是這麼多。如果你因爲各種原因,而不能升級到1.6,那你可以升級到該版本的最新版。

2.選擇一個正確的GC(Gargage Collection)。

        由於當JAVA程序GC的時候,會停下當前程序。尤其Full GC的時候,會停留很長時間。一般對於GUI程序來說,是很難接受的(想想Eclipse暫停的時候)。 JAVA5 以後,開始自帶了好幾種GC,你可以選擇一個適合你的種類。有以下四種Serial Collector,Parallel collector,Concurrent Collector,Train Collector(廢棄)。後面幾種時候使用並行收集,所以理論上有效率更高(要求你有超過2CUP,但是現在多核開始普及了,呵呵)。提示:更改GC 種類以後要適當挺高JVM的內存量。

3.正確設置內存大小。對JVM堆內的各個區域(young,old,perm)正確設置大小。

          這個是最困難的調整,因爲這個調整會直接影響GC的效率。而且由於各個程序的類型不用,所以沒有一個通用的數據。除了幾個常用規則以外,需要使用工具(jstat,jvmstat,jconsole等等)仔細調整。下面會提到幾個常用的準則。通常使用一下幾個參數調整-Xms -Xmx-XX:MaxPermSize。
     
          3.1 調高-XX:NewRatio(NewSize/MaxNewSize)的值,會減少young gc的次數,但會增加old gc的時間。

          3.2 增加普通GC的方法(減小Full GC)。擴大young區域的大小(最大40%),並過大Survivor的區域。使得更多的object留在young gen。


4.減小類的使用量,注意類的load和unload,減少JSP頁數。

        類實際上也是對象,會直接分配perm區域裏,即使Full GC也會很少收集。JSP也會分配到perm區域裏,效果同理。如果perm過大,超過XX:MaxPermSize值,會發生 OutOfMemoryError: PermGen space異常。解決方法是提高-XX:MaxPermSize值。

5.避免使用-Xnoclassgc       


6.如果是RMI程序,要注意調整RMI DGC的時間。


以下是幾個寫程序時,應該注意的地方。也可減小GC,提高JVM性能。

       1.不要使用System.gc()方法。

       因爲它會產生Full GC。

       2.儘可能少分配大的臨時對象(生命週期短的)

       可能會直接分配到old區域裏,old區域只有Full GC的時候會收集。     

       3.避免使用finalize()方法。

       finalize()會增加GC的負擔,使用java.lang.ref代替。







我是這麼配置的

catalina

SET JAVA_OPTS=%JAVA_OPTS% -XX:+UseConcMarkSweepGC -verbose:gc -Xms4096m -Xmx8192m -XX:PermSize=256M -XX:MaxPermSize=512m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9004" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false" -XX:-HeapDumpOnOutOfMemoryError  -XX:-DisableExplicitGC

發佈了261 篇原創文章 · 獲贊 15 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章