隨筆-59  評論-31  文章-0  trackbacks-0

                  寫了好幾篇關于這個方向的文章了,但連自己都感覺寫的有點亂,沒有總結。所以現在把所有方法整理到一起,如果以后又發(fā)現新的,我繼續(xù)補充到這篇文章里。

              這篇是技巧性的文章,如果要找關于GC或者調整內純的文章,看我其他幾篇文章。因為是JVM 調優(yōu)總結,所以廢話少說。從各方面一共收集到以下幾個方法:

                   1.升級 JVM 版本。如果能使用64-bit,使用64-bit JVM。
                    
                      基本上沒什么好解釋的,很簡單將JVM升級到最新的版本。如果你還是使用JDK1.4甚至是更早的JVM,那你首先要做的就是升級。因為JVM從1.4- >1.5->1.6可不是僅僅的版本號升級,或者僅僅往里面加了一堆新的語言特性,這么簡單。而是真正在JVM做了重大的改進,每次版本升級,都有巨大的性能升級。尤其是SUN認識到java是知己的全部的時候(夸張點,但連股票號都改成JAVA了,呵呵)。如果你經常逛SUN 的JVM論壇,你就會發(fā)現實際上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堆內的各個區(qū)域(young,old,perm)正確設置大小。

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

                    3.2 增加普通GC的方法(減小Full GC)。擴大young區(qū)域的大?。ㄗ畲?0%),并過大Survivor的區(qū)域。使得更多的object留在young gen。


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

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

                5.避免使用-Xnoclassgc       


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


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

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

                 因為它會產生Full GC。

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

                 可能會直接分配到old區(qū)域里,old區(qū)域只有Full GC的時候會收集。     

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

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

          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/roland101/archive/2008/03/26/2221463.aspx

          posted on 2009-06-28 10:57 RoyPayne 閱讀(435) 評論(0)  編輯  收藏 所屬分類: java基礎
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 夏邑县| 五原县| 集安市| 松溪县| 伊金霍洛旗| 南开区| 通城县| 大渡口区| 九江县| 清镇市| 温泉县| 芮城县| 辽中县| 娄烦县| 杭锦旗| 龙井市| 交城县| 乌鲁木齐市| 苏尼特右旗| 汾阳市| 沾益县| 汝阳县| 偃师市| 容城县| 汶川县| 大庆市| 志丹县| 阜阳市| 青川县| 会昌县| 贡觉县| 东阳市| 呈贡县| 门头沟区| 阳新县| 肇庆市| 双桥区| 防城港市| 本溪| 清苑县| 外汇|