zoukankan      html  css  js  c++  java
  • JVM启动参数

    JVM启动参数详解

    JVM是虚拟机标准,不同的厂商会根据JVM标准来生产自己的JVM虚拟机(又称Hotspot虚拟机),称之为JVM实现,目前主流的是Oracle JVM,本文参考了Orcale Java8官方文档。
    

    参数类别

    • 标准参数 所有JVM实现都必须支持这些启动参数,且向下兼容,参数前缀为-
    • 非标准参数:大多数JVM实现都支持这些参数,但不保证向下兼容,参数前缀为-X-XX

    常用标准参数

    -cp classpath:指定程序依赖的class文件或jar包所在路径,未指定则默认为当前目录
    **-jar: **运行一个jar包
    -verbose:class :显示JVM已加载的类,当jvm报告说找不到类或者类冲突时可此进行诊断
    -verbose:gc:显示每次GC的相关情况
    -verbose:jni: 输出native方法调用的相关情况,一般用于诊断jni调用错误信息

    常用非标准参数

    与内存相关的参数

    -Xms512m:指定堆初始大小为512MB。

    -Xmx512m:设置堆最大为512MB,oracle官方建议初始堆和最大堆值应一致

    -Xss1m:设置线程栈大小为1MB。JDK5.0以后每个线程栈大小为1MB,之前每个线程栈大小为256K。应当根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。需要注意的是:当这个值被设置的较大(例如>2MB)时将会在很大程度上降低系统的性能。

    -Xmn300m:设置年轻代的初始值以及最大值为300MB。在整个堆内存大小确定的情况下,增大年轻代将会减小年老代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,官方推荐配置为整个堆大小的一半或四分之一。

    -XX:NewSize=300MB:设置年轻代初始值为300MB,当-XX:MaxNewSize参数未被设置时,该参数相当于-Xmn。

    -XX:MaxNewSize=1024m:设置年轻代最大值为300MB。

    -XX:MetaspaceSize=256m:设置永久代默认值为256MB,当该空间第一次被填满时会触犯垃圾回收,随后系统会根据MaxMetaspaceSize的值来考虑是否为永久代扩容。

    -XX:MaxMetaspaceSize=256m:设置持久代最大值为256MB,持久代用于存放class元数据,默认情况下是没有限制的,所以最好别设置改值。

    -XX:NewRatio=2:设置年轻代(包括1个Eden和2个Survivor区)与老年代的比值为1:2,默认值为2,即新生代占老年代的1/2,占整个堆的1/3,Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。

    -XX:SurvivorRatio=8:设置年轻代中Survivor区与Eden的比值为1:8,默认值为8。JVM堆内存年轻代中默认有2个大小相等的Survivor区,所以1个Survivor区占整个年轻代大小的1/18。

    -XX:MaxTenuringThreshold=7:表示一个对象如果在Survivor区移动了7次还没有被垃圾回收就进入年老代。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代,对于需要大量常驻内存的应用,这样做可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代存活时间,增加对象在年轻代被垃圾回收的概率,减少Full GC的频率,这样做可以在某种程度上提高服务稳定性。并行回收器该值默认值15,CMS回收器,该值默认时6。

    -XX:TargetSurvivorRatio=90:允许90%的Survivor区被占用(JVM默认为50%)。提高对于Survivor区的使用率


    与垃圾回收器相关的参数

    串行垃圾回收器

    任何时刻都是使用一个线程执行GC操作,这种GC在线程间通信没有大的开销的应用会有相对不错的运行效率。最适合单处理器的系统;多处理器系统对这种GC而言并不能提升收集的效率。

    -XX:+UseSerialGC:采用串行回收器,作用于年轻代以及老年代,该回收器适用于小的简单的应用程序。

    并行垃圾回收器

    以并行的方式运GC, 能较大的减少GC的开销,其诞生的初衷就是专门给运行在多处理器,提高系统吞吐量。

    -XX:+UseParallelGC:采用并行回收器,仅作用于年轻代,具有高吞吐量的特性。

    -XX:+UseParallelOldGC:对老年代采用并行回收器。当采用该GC时,年轻代将自动采用ParallelGC。

    -XX:+UseParNewGC:采用并行垃圾回收器,仅作用于年轻代,SerialGC的多线程版。

    -XX:ParallelGCThreads=threads:设置并行垃圾回收器使用的线程数量。

    并发垃圾回收器(提高响应时间)

    -XX:+UseConcMarkSweepGC:使用CMS回收器用于回收老年代。Oracle建议在吞吐量垃圾收集器(ParallelGC)无法满足应用程序延迟要求时使用CMS垃圾收集器器,或使用G1回收器。采用该GC后,年轻代将自动使用ParNewGC。
    -XX:ConcGCThreads=*threads:指定并发线程数量。CMS工作分好几个阶段,在初始标记的时候,需要中断所有用户线程,在并发标记阶段,用户线程和标记线程并发执行。

    下一代垃圾回收器

    -XX:+UseG1GC:用于服务器端的垃圾回收器,既能满足应用程序的低时延要求(垃圾回收器启动时会暂定应用程序),既能提高吞吐量。

    -XX:+ScavengeBeforeFullGC:设置年轻代GC优于Full GC执行,默认是开启的。

    -XX:SoftRefLRUPolicyMSPerMB=0:软引用对象在最后一次被访问后能存活0毫秒(JVM默认为1000毫秒)

    -XX:TargetSurvivorRatio=90:允许90%的Survivor区被占用(JVM默认为50%)。提高对于Survivor区的使用率


    与调试相关的参数

    -Xloggc:file:与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。 若与verbose命令同时出现在命令行中,则以-Xloggc为准

    -Xprof: 跟踪正运行的程序,并将跟踪数据在标准输出输出;适合于开发环境调试

    -XX:HeapDumpPath=./java_pid.hprof:指定Dump堆内存时的路径

    -XX:+HeapDumpOnOutOfMemoryError: 当首次遭遇OOM时导出此时堆中相关信息

    -XX:+PrintClassHistogram:按下 Ctrl+Break 后打印堆内存中类实例的柱状信息,同JDK的 jmap -histo 命令

    -XX:-PrintConcurrentLocks:按下 Ctrl+Break 后打印线程栈中并发锁的相关信息,同JDK的 jstack -l 命令

    -XX:+PrintGC:每次GC时打印相关信息

    -XX:+PrintGCApplicationStoppedTime:打印应用程序暂停时间,即GC时间

    -XX:+PrintGCApplicationConcurrentTime:打印自上一次GC后(GC会使应用程序暂停),应用程序运行时间

    -XX:+PrintGCDetails:每次GC时打印详细信息

    -XX:+PrintGCTimeStamps:打印每次GC的时间戳

    -XX:+TraceClassLoading:跟踪类的加载信息

    -XX:+TraceClassLoadingPreorder:跟踪被引用到的所有类的加载信息

    -XX:+TraceClassResolution:跟踪常量池

    -XX:+TraceClassUnloading:跟踪类的卸载信息

    参考

    java8启动参数
    full GC触犯条件
    垃圾回收
    JVM启动参数1
    JVM启动参数2
    JVM启动参数3
    oracle java7 HOtspot选项

  • 相关阅读:
    logcat 自动清屏
    eclipse debug (调试) 学习心得
    黑马面试题
    如何分析解决Android ANR
    植物大战僵尸(一)
    cocos2d-小游戏
    VIM编辑器的使用
    面试题之排序总结
    面试题链表总结
    微软大楼设计方案(中等)(2017 计蒜之道 初赛 第六场)
  • 原文地址:https://www.cnblogs.com/xidongyu/p/9370778.html
Copyright © 2011-2022 走看看