虛擬機參數配置


  

什么是虛擬機參數配置

    在虛擬機運行的過程中,如果可以跟蹤系統的運行狀態,那么對於問題的故障

    排查會有一定的幫助,為此,在虛擬機提供了一些跟蹤系統狀態的參數,使用

    給定的參數執行Java虛擬機,就可以在系統運行時打印相關日志,用於分析實際

    問題。我們進行虛擬機參數配置,其實就是圍繞着堆、棧、方法區、進行配置。

堆的參數配置

    -XX:+PrintGC      每次觸發GC的時候打印相關日志

    -XX:+UseSerialGC      串行回收

    -XX:+PrintGCDetails  更詳細的GC日志

    -Xms               堆初始值

    -Xmx               堆最大可用值

    -Xmn               新生代堆最大可用值

    -XX:SurvivorRatio     用來設置新生代中eden空間和from/to空間的比例.

    含以-XX:SurvivorRatio=eden/from=den/to

    總結:在實際工作中,我們可以直接將初始的堆大小與最大堆大小相等,

    這樣的好處是可以減少程序運行時垃圾回收次數,從而提高效率。

    -XX:SurvivorRatio     用來設置新生代中eden空間和from/to空間的比例.

設置最大堆內存

    

    參數: -Xms5m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintCommandLineFlags

    

  publicclass JvmDemo01 {

    publicstaticvoid main(String[] args) throws InterruptedException {

           byte[] b1 = newbyte[1 * 1024 * 1024];

           System.out.println("分配了1m");

           jvmInfo();

           Thread.sleep(3000);

           byte[] b2 = newbyte[4 * 1024 * 1024];

           System.out.println("分配了4m");

           Thread.sleep(3000);

           jvmInfo();

 

      }

 

      /**

       * 轉換為m

       *

       * @param maxMemory

       * @return

       */

      staticprivate String toM(longmaxMemory) {

           floatnum = (float) maxMemory / (1024 * 1024);

           DecimalFormat df = new DecimalFormat("0.00");// 格式化小數

           String s = df.format(num);// 返回的是String類型

           returns;

      }

 

      staticprivatevoid jvmInfo() {

           // 最大內存

           longmaxMemory = Runtime.getRuntime().maxMemory();

           System.out.println("maxMemory:" + maxMemory + ",轉換為M:" + toM(maxMemory));

           // 當前空閑內存

           longfreeMemory = Runtime.getRuntime().freeMemory();

           System.out.println("freeMemory:" +freeMemory+",轉換為M:"+toM(freeMemory));

           // 已經使用內存

           longtotalMemory = Runtime.getRuntime().totalMemory();

           System.out.println("totalMemory:" +totalMemory+",轉換為M"+toM(totalMemory));

      }

 

}

設置新生代與老年代優化參數

    

    -Xmn    新生代大小,一般設為整個堆的1/3到1/4左右

    -XX:SurvivorRatio    設置新生代中eden區和from/to空間的比例關系n/1

設置新生代比例參數

    參數: -Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC

    publicclass JvmDemo02 {

 

       publicstaticvoid main(String[] args) {

           //-Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC

            byte [] b = null;

            for (inti = 0; i < 10; i++) {

                 b =newbyte[1*1024*1024];

           }

            

      }

     

}

設置新生與老年代代參數

    -Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC

    -Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC

    -XX:NewRatio=2(比例為1/2)

    總結:不同的堆分布情況,對系統執行會產生一定的影響,在實際工作中,

    應該根據系統的特點做出合理的配置,基本策略:盡可能將對象預留在新生代,

    減少老年代的GC次數。

    除了可以設置新生代的絕對大小(-Xmn),可以使用(-XX:NewRatio)設置新生代和老年

    代的比例:-XX:NewRatio=老年代/新生代

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM