JVM參數優化

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

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

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

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

            -Xmn=3M   設置年輕代的大小,若是設置太大會致使老年代過小,因此官方推薦爲整個堆的3/8大小
ui

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

            -XX:+HeapDumpOnOutOfMemoryError   當發生堆內存溢出的時候生成堆轉儲文件,能夠經過分析堆轉儲文件來找到溢出的緣由線程

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

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

            -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使用什麼模式.

固然也能夠經過-client以及-server來指定JVM運行的模式.

相關文章
相關標籤/搜索