• 虚拟机参数配置


      

    什么是虚拟机参数配置

        在虚拟机运行的过程中,如果可以跟踪系统的运行状态,那么对于问题的故障

        排查会有一定的帮助,为此,在虚拟机提供了一些跟踪系统状态的参数,使用

        给定的参数执行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=老年代/新生代

  • 相关阅读:
    AVAudioSession
    (whh仅供自己参考)进行ip网络请求的步骤
    1、大部分社交平台接口不支持https协议。
    怎样在官网上下载xcode7.2
    ios9 http请求失败的问题
    真机测试最详细的步骤
    svn的初级使用
    framework not found -fno-arc编译错误
    单例对象
    IOS6学习笔记(三)
  • 原文地址:https://www.cnblogs.com/zhouwen2017/p/9718469.html
Copyright © 2020-2023  润新知