JVM 参数及各部分含义(转)
转自:https://www.jianshu.com/p/1c6b5c2e95f9
JVM参数分类
JVM参数分为标准参数和非标准参数:
- 标准参数:
"-"
开头的参数,如-client
,-server
等 - 非标准参数:
"-X"
和"-XX"
开头的参数,如-Xmx
,-XX:+DisableExplicitGC
或者简单分为三类:
"-"
开头的参数"-X"
开头的参数"-XX"
开头的参数
标准参数("-"
开头的参数)
-client
选择client模式的VM。客户端常使用
-server ※
选择server模式的VM。服务端常使用
-agentlib:libname[=options]
Loads native agent library libname, for example:
-agentlib:hprof
-agentlib:jdwp=help
-agentlib:hprof=help
See JVMTI Agent Command-Line Options at
http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#starting
-agentpath:pathname[=options]
Loads a native agent library by full pathname.
-classpath classpath
指定查找class的路径。
可以是文件夹(directories)、jar文件(jar files)或者zip文档(zip archives)。
Linux平台用冒号分隔
如:
java -classpath lib/*:test.jar:test2.jar Main.class
-cp classpath
同-classpath
,是其简写模式
-Dproperty=value
设置系统参数。在代码中可以通过System.getProperty(property)获取
如:
java -Denv=test Main.class
程序中可以通过System.getProperty("env")获得其值为"test"
-d32
在32位环境中运行程序。如果不支持32位环境,则报错。
如果使用的不是64位系统,则-d32
是默认添加的
-d64
在64位环境中运行程序。如果不支持32位环境,则报错。
注:存在-server
参数时,-d64
是默认添加的
-jar
执行可执行jar包。
第一个参数是jar包名字,而非Main Class名字。
要使这个参数生效,要有一个前提,即manifest文件中需要有下面一行:
Main-Class: classname
一个manifest文件示例:
Manifest-Version: 1.0
Implementation-Title: spring-boot-web-base
Implementation-Version: 1.0-SNAPSHOT
Built-By: michealyang
Implementation-Vendor-Id: com.michealyang
Spring-Boot-Version: 2.0.1.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.michealyang.webbase.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_162-ea
Implementation-URL: http://maven.apache.org
-javaagent:jarpath[=options]
Loads a Java programming language agent. For more information about instrumenting Java applications, see the java.lang.instrument package description in the Java API documentation at http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html
-verbose
打印虚拟机运行信息
可以在程序启动时,做为参数传入。也可做为命令行使用
做为命令行使用的语法是:
java -verbose:[class|gc|jni] {pid}
verbose的冒号后面支持三个参数,即class, gc, jni
-verbose:class
打印加载的class信息
如:
java -verbose:class 12093
数据结果大致为:
[Opened /usr/local/jdk1.8.0_45/jre/lib/rt.jar]
[Loaded java.lang.Object from /usr/local/jdk1.8.0_45/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/local/jdk1.8.0_45/jre/lib/rt.jar]
[Loaded java.lang.Comparable from /usr/local/jdk1.8.0_45/jre/lib/rt.jar]
[Loaded java.lang.CharSequence from /usr/local/jdk1.8.0_45/jre/lib/rt.jar]
[Loaded java.lang.String from /usr/local/jdk1.8.0_45/jre/lib/rt.jar]
-verbose:gc
在启动参数中加上-verbose:gc
当发生gc时,可以打印出gc相关的信息;该信息不够高全面,等同于-XX:+PrintGC
。其实只要设置-XX:+PrintGCDetails
就会自动带上-verbose:gc
和-XX:+PrintGC
-verbose:jni
打印native方法或者其他native interface的调用信息
-version
打印java版本
java -version
结果为:
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
"-X"
开头的参数
"-X"
开头的参数是非标准参数,也就是只能被部分VM识别,而不能被全部VM识别的参数。
官网解释:
Options that begin with -X are non-standard (not guaranteed to be supported on all VM implementations), and are subject to change without notice in subsequent releases of the JDK
关于"-X"
的常见参数,见下面的按功能分类
"-XX"
开头的参数
"-XX"
开头的参数是非稳定参数,随时可能被修改或者移除。
官网解释:
Options that are specified with -XX are not stable and are subject to change without notice.
-XX
参数的常见语法有:
- -XX:+[PARAM], 开启该参数的功能,如
-XX:+DisableExplicitGC
,开启禁止显式GC - -XX:-[PARAM], 关闭该参数的功能,如
-XX:-DisableExplicitGC
,关闭禁止显示GC - -XX:PARAM=VALUE, 设置参数的值,如
-XX:SurvivorRatio=80
,设置eden/survivor的比值
关于"-XX"
的常见参数,见下面的按功能分类
按功能分类
标记了※的表示常用参数
内存参数
-Xmx[value] ※
设置堆内存最大值
-Xmx1g
或者
-Xmx1024m
-Xms[value] ※
设置堆内存最小值。一般与-Xmx
设置一样大
-Xmx1g
-Xmn[value] ※
设置新生代大小
-Xmn256m
-Xss[value] ※
设置栈空间大小
-Xss128k
-XX:SurvivorRatio=[value] ※
新生代Eden和Survivor划分比例
-XX:SurvivorRatio=8
-XX:PermSize=[value] ※
设置永久代初始大小。JDK8中已移除
-XX:PermSize=128m
-XX:MaxPermSize=[value] ※
设置永久代最大值。JDK8中已移除
-XX:MaxPermSize=128m
-XX:MetaspaceSize=[value] ※
设置meta区大小。JDK8增加
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=[value] ※
设置永久代最大值。JDK8中已移除
-XX:MaxMetaspaceSize=128m
-XX:ReservedCodeCacheSize
用于设置Code Cache大小,JIT编译的代码都放在Code Cache中,若Code Cache空间不足则JIT无法继续编译,并且会去优化,比如编译执行改为解释执行,由此,性能会降低
-XX:ReservedCodeCacheSize=128m
行为相关参数
Behavioral Options,即影响VM基本行为的参数
-XX:-DisableExplicitGC ※
GC参数
-XX:-UseSerialGC
使用串行垃圾回收器回收新生代
-XX:+UseParNewGC ※
使用并行垃圾回收器回收新生代
-XX:ParallerGCThreads
当使用-XX:+UseParNewGC
时,该参数设定GC的线程数,默认与CPU核数相同
-XX:-UseParallelGC
使用Parallel Scavenge垃圾回收器
-XX:UseParallelGC = “Parallel Scavenge” + “Serial Old”
-XX:-UseParallelOldGC
用并行垃圾回收器进行full gc
-XX:UseParallelOldGC = “Parallel Scavenge” + “Parallel Old”
-XX:-UseConcMarkSweepGC ※
使用CMS做为垃圾回收器
注:当前常见的垃圾回收器组合是下面这种:
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-Xloggc:[path] ※
设置gc日志位置
-Xloggc:/opt/logs/mobile/admin.gc.log
-XX:+PrintGC ※
打印GC详情
输出形式:
[GC 118250K->113543K(130112K), 0.0094143 secs]
[Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails ※
打印GC更详细的信息
输出形式:
[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
[GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
G1参数
Garbage First Garbage Collection Options
-XX:+UseG1GC
使用G1做为垃圾回收器
-XX:MaxGCPauseMillis=n
Sets a target for the maximum GC pause time. This is a soft goal, and the JVM will make its best effort to achieve it.
-XX:InitiatingHeapOccupancyPercent=n
Percentage of the (entire) heap occupancy to start a concurrent GC cycle. It is used by GCs that trigger a concurrent GC cycle based on the occupancy of the entire heap, not just one of the generations (e.g., G1). A value of 0 denotes 'do constant GC cycles'. The default value is 45.
-XX:NewRatio=n
old区/new区的比例,默认为2
-XX:SurvivorRatio=n
eden/survivor的比值,默认为8.
-XX:MaxTenuringThreshold=n
Maximum value for tenuring threshold. The default value is 15.
-XX:ParallelGCThreads=n
Sets the number of threads used during parallel phases of the garbage collectors. The default value varies with the platform on which the JVM is running.
-XX:ConcGCThreads=n
Number of threads concurrent garbage collectors will use. The default value varies with the platform on which the JVM is running.
-XX:G1ReservePercent=n
Sets the amount of heap that is reserved as a false ceiling to reduce the possibility of promotion failure. The default value is 10.
-XX:G1HeapRegionSize=n
With G1 the Java heap is subdivided into uniformly sized regions. This sets the size of the individual sub-divisions. The default value of this parameter is determined ergonomically based upon heap size. The minimum value is 1Mb and the maximum value is 32Mb.
CMS参数
-XX:-UseConcMarkSweepGC ※
使用CMS做为垃圾回收器
性能相关参数
Performance Options
-XX:+AggressiveOpts
Turn on point performance compiler optimizations that are expected to be default in upcoming releases. (Introduced in 5.0 update 6.)
-XX:+UseLargePages
Use large page memory. (Introduced in 5.0 update 5.) For details, see Java Support for Large Memory Pages.
-XX:+OptimizeStringConcat
Optimize String concatenation operations where possible. (Introduced in Java 6 Update 20)
debug相关参数
Debugging Options
-XX:+PrintFlagsInitial
显示JVM所有可设置的参数及它们的值
-XX:+PrintFlagsFinal
显示所有可设置的参数及它们的值
可以设置的参数默认是不包括diagnostic或experimental系的。要在-XX:+PrintFlagsFinal
的输出里看到这两种参数的信息,分别需要显式指定-XX:+UnlockDiagnosticVMOptions
和-XX:+UnlockExperimentalVMOptions
。
语法:
java -PrintFlagsFinal -version {id}
添加
-version
是防止被理解成启动java程序
输出示例:
-XX:ErrorFile=[path] ※
生成error 文件的路径
-XX:ErrorFile=/opt/logs/mobile/admin.error
-XX:+ShowMessageBoxOnError
当jvm crash的时候在linux里会启动gdb 去分析和调式,适合在测试环境中使用
-XX:+HeapDumpOnOutOfMemoryError ※
OOM的时候dump出内存。
-XX:HeapDumpPath
dump文件位置
Q & A
Q: -Xss和-XX:ThreadStackSize有啥区别?
A: 本质上是没有区别的。-Xss
是在HotSpot出现之前就存在的,而-XX:ThreadStackSize
是HotSpot的内置参数。也就是说-Xss
适用于很多VM,包括HotSpot,而-XX:ThreadStackSize
只适用于HotSpot。
另外,使用jinfo的时候,应该使用ThreadStackSize
:
jinfo -float ThreadStackSize [pid]
作者:齐晋
链接:https://www.jianshu.com/p/1c6b5c2e95f9
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
JVM 参数及各部分含义(转)的更多相关文章
- JVM 参数含义
JVM参数的含义 实例见实例分析 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,J ...
- JAVA——JVM参数设置规则以及参数含义
JVM参数设置规则: -XX:+<option> 启用option,例如:-XX:+PrintGCDetails启动打印GC信息的选项,其中+号表示true,开启的意思-XX:-<o ...
- Java 6 JVM参数选项大全(中文版)
原文来自: http://kenwublog.com/docs/java6-jvm-options-chinese-edition.htm 本文是基于最新的SUN官方文档Java SE 6 Hotsp ...
- JVM参数设置、分析(转发)
JVM参数的含义 实例见实例分析 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,J ...
- JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...
- JVM参数汇总
一.java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容:其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足 ...
- JVM系列三:JVM参数设置、分析(转载)
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...
- jvm 参数调优
FROM: http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html#CMSInitiatingOccupancyFraction ...
- jvm参数优化
一.HotSpot JVM 提供了三类参数 现在的JVM运行Java程序(和其它的兼容性语言)时在高效性和稳定性方面做的非常出色.例如:自适应内存管理.垃圾收集.及时编译.动态类加载.锁优化等.虽然有 ...
随机推荐
- 测试误区《二》 python逻辑运算和关系运算优先级
关系运算 关系运算就是对2个对象进行比较,通过比较符判断进行比较,有6种方式. x > y 大于 x >= y 大于等于 x < y 小于 x <= y 小于等于 x = y ...
- MySQL第五次课
/*Mysql第五次课 索引与事务 数据库优化 数据库优化指的就是通过各种途径 提高查询效率 优化方式有多种,但其中之一就是为字段 添加索引 什么是索引? 相当于为某个字段或某几个字段,添加 了目录, ...
- chap1-HttpRequest测试类
# HttpRequest测试类, 封装请求方法 import requests class HttpRequest: def http_request(self, url, method, data ...
- Solr7.3.0入门教程,部署Solr到Tomcat,配置Solr中文分词器
solr 基本介绍 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache ...
- Python利用元类来控制实例创建
问题: 改变实例创建方式,以此来实现单例模式,缓存或者其他类似的特性. 解决方法: 如果想定制化创建实例的过程,可以通过定制一个元类并以某种方式重新实现它的__call__()方法. 使用元类的单例模 ...
- linux Init分析(原创)
1.uboot的目标就是启动内核kernel: 2.kernel的目的就是启动应用程序,而第一个应用程序即是Init,构建根文件系统. 从uboot初始化配置后,引导内核的启动,启动函数为:start ...
- 芮勇博士荣获2016年IEEE 计算机学会技术成就奖
微软亚洲研究院常务副院长 芮勇 日前,电气电子工程师学会(the Institute of Electrical and Electronics Engineers, IEEE)计算机学会(Comp ...
- iPhone6爆炸真是小概率事件吗?
前不久,央视新闻报道,根据上海市消费者权益保护委员会统计,2016年9月到11月,共接到8名消费者投诉,反映其苹果手机在正常使用或者正常充电的情况下突然爆炸.此外,苹果手机还被投诉存在自动关机等问题, ...
- tfgan折腾笔记(一):核心功能简要概述
tfgan是什么? tfgan是tensorflow团队开发出的一个专门用于训练各种GAN的轻量级库,它是基于tensorflow开发的,所以兼容于tensorflow.在tensorflow1.x版 ...
- Docker实战之Kafka集群
1. 概述 Apache Kafka 是一个快速.可扩展的.高吞吐.可容错的分布式发布订阅消息系统.其具有高吞吐量.内置分区.支持数据副本和容错的特性,适合在大规模消息处理场景中使用. 笔者之前在物联 ...