java启动参数共分为三类;
其一是标准参数(-),全部的JVM实现都必须实现这些参数的功能,并且向后兼容;
其二是非标准参数(-X),默认jvm实现这些参数的功能,可是并不保证全部jvm实现都知足,且不保证向后兼容;
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不一样,未来可能会随时取消,须要慎重使用;html
-XX:+<option> 启用option,例如:-XX:+PrintGCDetails启动打印GC信息的选项,其中+号表示true,开启的意思 -XX:-<option> 不启用option,例如:-XX:-PrintGCDetails关闭启动打印GC信息的选项,其中-号表示false,关闭的意思 -XX:<option>=<number> 设定option的值为数字类型,可跟单位,例如 32k, 1024m, 2g。例如:-XX:MaxPermSize=64m -XX:<option>=<string> 设定option的值为字符串,例如: -XX:HeapDumpPath="C:\Users\Daxin\Desktop\jvmgcin"
1.设置环境变量JAVA_OPTSjava
2.Windows下,在/bin/catalina.bat,Unix下,在/bin/catalina.sh的前面,增长 JAVA_OPTS=’-Xms256m -Xmx512m’linux
Tomcat 的启动参数位于安装目录 ${TOMCAT_HOME}/bin目录下,Linux 操做系统就是 catalina.sh 文件。JAVA_OPTS,就是用来设置 JVM 相关运行参数的变量,还能够在 CATALINA_OPTS 变量中设置。关于这 2 个变量,仍是多少有些区别的:segmentfault
JAVA_OPTS:用于当 Java 运行时选项“start”、“stop”或“run”命令执行。缓存
CATALINA_OPTS:用于当 Java 运行时选项“start”或“run”命令执行。tomcat
为何有两个不一样的变量?它们之间都有什么区别呢?服务器
首先,在启动 Tomcat 时,任何指定变量的传递方式都是相同的,能够传递到执行“start”或“run”命令中,但只有设定在 JAVA_OPTS 变量里的参数被传递到“stop”命令中。对于 Tomcat 运行过程,可能没什么区别,影响的是结束程序,而不是启动程序。多线程
第二个区别是更微妙,其余应用程序也可使用 JAVA_OPTS 变量,但只有在 Tomcat 中使用 CATALINA_OPTS 变量。若是你设置环境变量为只使用 Tomcat,最好你会建议使用 CATALINA_OPTS 变量,而若是你设置环境变量使用其它的 Java 应用程序,例如 JBoss,你应该把你的设置放在JAVA_OPTS 变量中。并发
我在本地配置的:jvm
-server ## 服务器模式 -Xms2g ## 初始化堆内存大小 -Xmx2g ## 堆内存最大值 -Xmn256m ## 年轻代内存大小,整个JVM内存=年轻代 + 年老代 + 持久代 -Xss256k ## 设置每一个线程的堆栈大小 -XX:PermSize=256m ## 持久代内存大小 -XX:MaxPermSize=256m ## 最大持久代内存大小 -XX:ReservedCodeCacheSize=256m ## 代码缓存,存储已编译方法生成的本地代码 -XX:+UseCodeCacheFlushing ## 代码缓存满时,让JVM放弃一些编译代码 -XX:+DisableExplicitGC ## 忽略手动调用GC, System.gc()的调用就会变成一个空调用,彻底不触发GC -Xnoclassgc ## 禁用类的垃圾回收,性能会高一点 -XX:+UseConcMarkSweepGC ## 并发标记清除(CMS)收集器 -XX:+CMSParallelRemarkEnabled ## 启用并行标记,下降标记停顿 -XX:+UseParNewGC ## 对年轻代采用多线程并行回收,这样收得快 -XX:+UseCMSCompactAtFullCollection ## 在FULL GC的时候对年老代的压缩,Full GC后会进行内存碎片整理,过程没法并发,空间碎片问题没有了,但提顿时间不得不变长了 -XX:CMSFullGCsBeforeCompaction=3 ## 多少次Full GC 后压缩old generation一次 -XX:LargePageSizeInBytes=128m ## 内存页的大小 -XX:+UseFastAccessorMethods ## 原始类型的快速优化 -XX:+UseCMSInitiatingOccupancyOnly ## 使用设定的回收阈值(下面指定的70%)开始CMS收集,若是不指定,JVM仅在第一次使用设定值,后续则自动调整 -XX:CMSInitiatingOccupancyFraction=70 ## 使用cms做为垃圾回收使用70%后开始CMS收集 -XX:SoftRefLRUPolicyMSPerMB=50 ## Soft reference清除频率,默认存活1s,设置为0就是不用就清除 -XX:+AlwaysPreTouch ## 强制操做系统把内存真正分配给JVM -XX:+PrintClassHistogram ## 按下Ctrl+Break后,打印类的信息 -XX:+PrintGCDetails ## 输出GC详细日志 -XX:+PrintGCTimeStamps ## 输出GC的时间戳(以基准时间的形式) -XX:+PrintHeapAtGC ## 在进行GC的先后打印出堆的信息 -XX:+PrintGCApplicationConcurrentTime ## 输出GC之间运行了多少时间 -XX:+PrintTenuringDistribution ## 参数观察各个Age的对象总大小 -XX:+PrintGCApplicationStoppedTime ## GC形成应用暂停的时间 -Xloggc:../log/gc.log ## 指定GC日志文件的输出路径 -ea ## 打开断言机制,jvm默认关闭 -Dsun.io.useCanonCaches=false ## java_home没有配置,或配置错误会报异常 -Dsun.awt.keepWorkingSetOnMinimize=true ## 可让IDEA最小化到任务栏时依然保持以占有的内存,当你从新回到IDEA,可以被快速显示,而不是由灰白的界面逐渐显现整个界面,加快回复到原界面的速度 -Djava.net.preferIPv4Stack=true ## 让tomcat默认使用IPv4 -Djdk.http.auth.tunneling.disabledSchemes="" ## 等于Basic会禁止proxy使用用户名密码这种鉴权方式,反之空就可使用 -Djsse.enablesSNIExtension=false ## SNI支持,默认开启,开启会形成ssl握手警告 -XX:+HeapDumpOnOutOfMemoryError ## 表示当JVM发生OOM时,自动生成DUMP文件 -XX:HeapDumpPath=D:/data/log ## 表示生成DUMP文件的路径,也能够指定文件名称,若是不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。 -XX:-OmitStackTraceInFastThrow ## 省略异常栈信息从而快速抛出,这个配置抛出这个异常很是快,不用额外分配内存,也不用爬栈,可是出问题看不到stack trace,不利于排查问题 -Dfile.encoding=UTF-8 -Duser.name=qhong
其余暂时没用到的:
NewRatio:3 ## 新生代与年老代的比例。好比为3,则新生代占堆的1/4,年老代占3/4。 SurvivorRatio:8 ## 新生代中调整eden区与survivor区的比例,默认为8,即eden区为80%的大小,两个survivor分别为10%的大小。 PretenureSizeThreshold:10m ## 晋升年老代的对象大小。默认为0,好比设为10M,则超过10M的对象将不在eden区分配,而直接进入年老代。 MaxTenuringThreshold:15 ## 晋升老年代的最大年龄。默认为15,好比设为10,则对象在10次普通GC后将会被放入年老代。 -XX:MaxTenuringThreshold=0 ## 垃圾最大年龄,若是设置为0的话,则年轻代对象不通过Survivor区,直接进入年老代,该参数只有在串行GC时才有效 -XX:+HeapDumpBeforeFullGC ## 当JVM 执行 FullGC 前执行 dump -XX:+HeapDumpAfterFullGC ## 当JVM 执行 FullGC 后执行 dump -XX:+HeapDumpOnCtrlBreak ## 交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照 -XX:+PrintGC ## 输出GC日志 -verbose:gc ## 同PrintGC,输出GC日志 -XX:+PrintGCDateStamps ## 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintFlagsInitial ## 显示全部可设置参数及默认值 -enablesystemassertions ## 激活系统类的断言 -esa ## 同上 -disablesystemassertions ## 关闭系统类的断言 -dsa ## 同上 -XX:+ScavengeBeforeFullGC ## FullGC前回收年轻代内存,默认开启 -XX:+CMSScavengeBeforeRemark ## CMS remark前回收年轻代内存 -XX:+CMSIncrementalMode ## 采用增量式的标记方式,减小标记时应用停顿时间 -XX:+CMSClassUnloadingEnabled ## 相对于并行收集器,CMS收集器默认不会对永久代进行垃圾回收。若是但愿回收,就使用该标志,注意,即便没有设置这个标志,一旦永久代耗尽空间也会尝试进行垃圾回收,可是收集不会是并行的,而再一次进行Full GC -XX:+CMSConcurrentMTEnabled ## 当该标志被启用时,并发的CMS阶段将以多线程执行(所以,多个GC线程会与全部的应用程序线程并行工做)。该标志已经默认开启,若是顺序执行更好,这取决于所使用的硬件,多线程执行能够经过-XX:-CMSConcurremntMTEnabled禁用。
Xms与Xmx配置相同的值,为了可以在GC后不须要从新分隔计算堆区的大小而浪费资源。