JVM參數優化

cymt 9年前發布 | 16K 次閱讀 JVM Java開發

JVM畢竟不是智能的,所以我們要根據實際的運行機器,實際業務等情況選擇合適的參數去優化JVM下面我講一些簡單的參數列下來,這些參數的使用需要先理解JVM內存模型,垃圾回收機制.

  1. 當堆需要擴展的時內存不夠會報  OutOfMemeryError: Heap(堆內存溢出) ,這時可能設置堆大小參數:

    </li> </ol>

                -Xms=10M  設置堆的最小大小

                -Xmx=20M   設置堆的最大大小

                -Xmn=3M   設置年輕代的大小,如果設置太大會導致老年代太小,所以官方推薦為整個堆的3/8大小

                -XX:HeapDumpPath=E:\Java\dump   設置堆轉儲文件的地址

                -XX:+HeapDumpOnOutOfMemoryError   當發生堆內存溢出的時候生成堆轉儲文件,可以通過分析堆轉儲文件來找到溢出的原因

        2.在經常動態生成大量Class的應用中,如使用Cglib增強,動態語言,大量Jsp文件 時,可能報OutOfMemeryError:PerGen space(方法區溢出).

                -XX:PermSize:10M    設置方法區最小大小   //紅薯告訴我1.8的JDK已經把這個參數廢棄了

                -XX:MaxPermsize        設置方法去最大大小    //紅薯告訴我1.8的JDK已經把這個參數廢棄了

        3.垃圾回收器設置:

            -XX:UseSerialGC    新生代使用Serial收集器,老年代使用Serial Old 收集器 .當JVM運行在Client模式下,默認打開.

            -XX:UseParNewGC    新生代使用ParNew收集器,老年代使用Serial Old 收集器

            -XX:UseConcMarkSweepGC  新生代使用ParNew收集器,老年代使用CMS,Serial Old,當老年代使用CMS出現Concurrent Mode Failure的時候才使用Serial Old收集器

            -XX:ParallelGCThreads  由于ParNew收集器是多線程的,默認線程數就是內核數目,可以通過這個指定垃圾收集時線程數目

            -XX:UseParallelGC     新生代使用Parallel Scavenge收集器,老年代使用Serial Old收集器,JVM運行在Server模式下,默認開啟.

            -XX:UseParallelGC   新生代使用Parallel Scavenge收集器,老年代使用Parallel Old收集器

            -XX:Maxtenuing Threshold      當新手代對象經過指定的次數就能進入老年代,默認為15.

            -XX:printGCDetails  打印垃圾收集的日志



    關于JVM的Client和Server模式.JVM有Client和Server模式,在Client模式下,啟動比較快,垃圾 收集器默認使用Serial + Serial Old.在Server模式下,啟動比較慢,默認使用Parallel Scanvenge + Serial Old.Client適用于桌面應用程序,用戶線程執行時間長,用戶體驗好.Server適用于服務器端,吞吐量高.

    JVM會根據機器的內存以及CPU數量來判斷使用什么模式.通過java -version可以看到JVM使用什么模式.

    JVM參數優化

    當然也可以通過-client以及-server來指定JVM運行的模式.

 本文由用戶 cymt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!