美文网首页
Java虚拟机参数

Java虚拟机参数

作者: 谁说咖啡不苦 | 来源:发表于2019-05-21 15:13 被阅读0次

    -XX:+PrintGC 简单的GC信息
    -XX:+PrintGCDetail 详细的GC信息
    -XX:+PrintGCTimeStamps GC的发生时间
    -XX:+PrintGCApplicationConcurrentTime 应用程序的执行时间
    -XX:+PrintGCApplicationStoppedTime  GC的STW的停顿时间
    -Xloggc:xxxx/gc.log 指定GC的log的路径
    -XX:+TraceClassLoading 可用显示有哪些类被加载
    -XX:+TraceClassUnloading 可用来显示哪些类被卸载
    -XX:+PrintCommandLineFlags  用来显示命令行输入哪些参数
    

    堆相关参数

    -Xms 当前内存的最小值
    -Xmx 当前内存的最大值
    
    java -Xmx20M -Xms5m xxx.class
    在实际的工作用,可用直接将初始堆-Xms与最大堆-Xmx设置相等。这样的好处是可以减少程序运行时进行的垃圾回收次数,从而提高程序的性能。
    

    -Xmn 可以设置新生代的大小。设置一个较大的新生代会减小老年代的大小,这个参数对系统的性能以及GC行为有很大的影响。新生代的大小一般建议设置为整个堆空间的1/3到1/4左右。
    -XX:SurvivorRatio=eden/from=eden/to 用来设置新生代中eden空间和from/to空间的比例关系。
    -Xmn的大小基本就是等于 eden + from + to的大小
    
    java -Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails
    这里表示的eden的空间大小是from的空间的两倍。
    
    -XX:NewRatio=老年代/新生代
    -Xmx20M -Xms20M -XX:NewRatio=2 -XX:+PrintGCDetails
    
    -XX:+HeapDumpOnOutOfMemeoryError 在内存溢出的时候,导出整个堆的信息
    -XX:HeapDumpPath 指定导出堆文件存放路径
    

    方法区的配置

    JDK 1.7 -XX:PermSize和-XX:MaxPermSize
    JDK 1.8 -XX:MetaspaceSize 和-XX:MaxMetaspaceSize
    

    栈配置

    -Xss 指定线程栈的大小
    

    直接内存

    直接内存是Java程序中非常重要的组成部分,特别是在NIO中被广泛使用。直接内存跳过了Java堆,使Java程序可以直接访问原生堆空间。但是,直接内存也不是说一定可以提高内存访问速度,不能这么武断的认为。
    直接内存的申请速度是远远低于堆空间的申请速度。

    -XX:MaxDirectMemorySize 最大直接内存空间。
    如果不设置,默认为最大堆空间, 即-Xmx。当直接内存使用量达到了-XX:MaxDirectMemeorySize的时候,就会触发垃圾回收。
    如果垃圾回收不能有效释放足够空间,直接内存溢出依然会引起系统的OOM。
    

    Client和Server模式选择

    通过Java -version来查看系统是选择什么模式来运行。虚拟机在Server模式下回尝试收集更多的系统信息,使用更复杂的优化算法对程序进行优化,因此,当系统完全启动并进入运行稳定期后,Server模式的执行速度回远远快于Client模式。所以,长期运行的后台系统,建议使用Server模式。

    java -server xxxx

    相关文章

      网友评论

          本文标题:Java虚拟机参数

          本文链接:https://www.haomeiwen.com/subject/jbdjzqtx.html