java启动时JVM参数分析

java启动命令
  • 执行类:java [-options] class [args…]
  • 执行jar文件:java [-options] -jar jarfile [args…]

[-options] 配置 Java 系统参数
[args…] 配置 Java 运行参数 即main方法中的参数数组args,可以通过修改启动配置进行设置,多个参数之间用空格分隔,如果参数自身带有空格,则需要用引号包裹。

java启动参数共分为三类
  1. 其一是标准参数(-),顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。我们可以通过 -help 命令来检索出所有标准参数。所有的JVM实现都必须实现这些参数的功能,而且向后兼容;该参数在程序中任何位置都可以访问到,优先级最高。覆盖程序中同名配置;预定义的标准参数(非-D开头的选项)的个数是有限的。但是我们还可以自定义设置系统属性,系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user,程序中可以读取该参数值,执行相关逻辑。虚拟机系统参数中设置的参数键值对(只有-D定义的系统属性是键值对形式),在程序中可以用System.getProperty("propertyName")获取对应参数值。

  2. 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

  3. 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

提示:2、3为非标准系统参数形式,一般与 JVM 虚拟机设置有关,参数名和值都由 JVM 规范规定。例如:-Xms :初始堆大小、-Xmx :最大堆大小。主要用于JVM调优和debug。
该参数的书写形式又分为两大类:
  ①、Boolean类型
格式:-XX:[±] 表示启用或者禁用name属性。例子:-XX:+UseG1GC(表示启用G1垃圾收集器)
  ②、Key-Value类型
格式:-XX:= 表示name的属性值为value。例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)

JVM调优参数
参数及其默认值 描述 用例/所属
-verbose:[class|gc|jni] -verbose:class 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断。-verbose:gc 输出每次GC的相关情况。-verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。
-Xms<size> 设置JVM初始java堆内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xms512m
-Xmx<size> 设置JVM最大可用java堆内存为512M -Xmx512m
-Xmn<size> 设置年轻代大小为200M。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 -Xmn200m
-Xss<size> 设置每个 Java 线程堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 -Xss128k
-Xloggc:file 与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。若与verbose命令同时出现在命令行中,则以-Xloggc为准。
-Xprof 跟踪正运行的程序,并将跟踪数据在标准输出输出;适合于开发环境调试。
-XX:-DisableExplicitGC 禁止调用System.gc();但jvm的gc仍然有效 行为参数
-XX:+MaxFDLimit 最大化文件描述符的数量限制 行为参数
-XX:+ScavengeBeforeFullGC 新生代GC优先于Full GC执行 行为参数
-XX:+UseGCOverheadLimit 在抛出OOM之前限制jvm耗费在GC上的时间比例 行为参数
-XX:-UseConcMarkSweepGC 对老生代采用并发标记交换算法进行GC。jvm中GC执行的一种方式,并发(ConcMarkSweepGC)是指多个线程并发执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大; 行为参数
-XX:-UseParallelGC 启用并行GC。jvm中GC执行的一种方式,并行(ParallelGC)是指GC运行时,对应用程序运行没有影响,GC和app两者的线程在并发执行,这样可以最大限度不影响app的运行; 行为参数
-XX:-UseParallelOldGC 对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用 行为参数
-XX:-UseSerialGC 启用串行GC。jvm中GC执行的一种方式,串行(SerialGC)是jvm的默认GC方式,一般适用于小型应用和单处理器,算法比较简单,GC效率也较高,但可能会给应用带来停顿; 行为参数
-XX:+UseThreadPriorities 启用本地线程优先级 行为参数
-XX:LargePageSizeInBytes=4m 设置用于Java堆的大页面尺寸 性能调优
-XX:MaxHeapFreeRatio=70 GC后java堆中空闲量占的最大比例 性能调优
-XX:MaxNewSize=size 新生成对象能占用内存的最大值 性能调优
-XX:MaxPermSize=64m 老生代对象能占用内存的最大值 性能调优
-XX:MinHeapFreeRatio=40 GC后java堆中空闲量占的最小比例 性能调优
-XX:NewRatio=2 新生代内存容量与老生代内存容量的比例 性能调优
-XX:NewSize=2.125m 新生代对象生成时占用内存的默认值 性能调优
-XX:ReservedCodeCacheSize=32m 保留代码占用的内存容量 性能调优
-XX:ThreadStackSize=512 设置线程栈大小,若为0则使用系统默认值 性能调优
-XX:+UseLargePages 使用大页面内存
-XX:-CITime 打印消耗在JIT编译的时间 调试参数
-XX:ErrorFile=./hs_err_pid<pid>.log 保存错误日志或者数据到文件中 调试参数
-XX:-ExtendedDTraceProbes 开启solaris特有的dtrace探针 调试参数
-XX:HeapDumpPath=./java_pid<pid>.hprof 指定导出堆信息时的路径或文件名 调试参数
-XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息 调试参数
-XX:OnError="<cmd args>;<cmd args>" 出现致命ERROR之后运行自定义命令 调试参数
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" 当首次遭遇OOM时执行自定义命令 调试参数
-XX:-PrintClassHistogram 遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同 调试参数
-XX:-PrintConcurrentLocks 遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同 调试参数
-XX:-PrintCommandLineFlags 打印在命令行中出现过的标记 调试参数
-XX:-PrintCompilation 当一个方法被编译时打印相关信息 调试参数
-XX:-PrintGC 每次GC时打印相关信息 调试参数
-XX:-PrintGC Details 每次GC时打印详细信息 调试参数
-XX:-PrintGCTimeStamps 打印每次GC的时间戳 调试参数
-XX:-TraceClassLoading 跟踪类的加载信息 调试参数
-XX:-TraceClassLoadingPreorder 跟踪被引用到的所有类的加载信息 调试参数
-XX:-TraceClassResolution 跟踪常量池 调试参数
-XX:-TraceClassUnloading 跟踪类的卸载信息 调试参数
-XX:-TraceLoaderConstraints 跟踪类加载器约束的相关信息 调试参数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容