JVM 参数及各部分含义(转)
轉(zhuǎn)自:https://www.jianshu.com/p/1c6b5c2e95f9
JVM參數(shù)分類
JVM參數(shù)分為標(biāo)準(zhǔn)參數(shù)和非標(biāo)準(zhǔn)參數(shù):
- 標(biāo)準(zhǔn)參數(shù): "-"開(kāi)頭的參數(shù),如-client, -server等
- 非標(biāo)準(zhǔn)參數(shù): "-X"和"-XX"開(kāi)頭的參數(shù),如-Xmx, -XX:+DisableExplicitGC
或者簡(jiǎn)單分為三類:
- "-"開(kāi)頭的參數(shù)
- "-X"開(kāi)頭的參數(shù)
- "-XX"開(kāi)頭的參數(shù)
標(biāo)準(zhǔn)參數(shù)("-"開(kāi)頭的參數(shù))
-client
選擇client模式的VM。客戶端常使用
-server ※
選擇server模式的VM。服務(wù)端常使用
-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平臺(tái)用冒號(hào)分隔
如:
java -classpath lib/*:test.jar:test2.jar Main.class
-cp classpath
同-classpath,是其簡(jiǎn)寫模式
-Dproperty=value
設(shè)置系統(tǒng)參數(shù)。在代碼中可以通過(guò)System.getProperty(property)獲取
如:
java -Denv=test Main.class
程序中可以通過(guò)System.getProperty("env")獲得其值為"test"
-d32
在32位環(huán)境中運(yùn)行程序。如果不支持32位環(huán)境,則報(bào)錯(cuò)。
如果使用的不是64位系統(tǒng),則-d32是默認(rèn)添加的
-d64
在64位環(huán)境中運(yùn)行程序。如果不支持32位環(huán)境,則報(bào)錯(cuò)。
注:存在-server參數(shù)時(shí),-d64是默認(rèn)添加的
-jar
執(zhí)行可執(zhí)行jar包。
第一個(gè)參數(shù)是jar包名字,而非Main Class名字。
要使這個(gè)參數(shù)生效,要有一個(gè)前提,即manifest文件中需要有下面一行:
Main-Class: classname
一個(gè)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
打印虛擬機(jī)運(yùn)行信息
可以在程序啟動(dòng)時(shí),做為參數(shù)傳入。也可做為命令行使用
做為命令行使用的語(yǔ)法是:
java -verbose:[class|gc|jni] {pid}
verbose的冒號(hào)后面支持三個(gè)參數(shù),即class, gc, jni
-verbose:class
打印加載的class信息
如:
java -verbose:class 12093
數(shù)據(jù)結(jié)果大致為:
[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
在啟動(dòng)參數(shù)中加上-verbose:gc當(dāng)發(fā)生gc時(shí),可以打印出gc相關(guān)的信息;該信息不夠高全面,等同于-XX:+PrintGC。其實(shí)只要設(shè)置-XX:+PrintGCDetails就會(huì)自動(dòng)帶上-verbose:gc和-XX:+PrintGC
-verbose:jni
打印native方法或者其他native interface的調(diào)用信息
-version
打印java版本
java -version
結(jié)果為:
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"開(kāi)頭的參數(shù)
"-X"開(kāi)頭的參數(shù)是非標(biāo)準(zhǔn)參數(shù),也就是只能被部分VM識(shí)別,而不能被全部VM識(shí)別的參數(shù)。
官網(wǎng)解釋:
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
關(guān)于"-X"的常見(jiàn)參數(shù),見(jiàn)下面的按功能分類
"-XX"開(kāi)頭的參數(shù)
"-XX"開(kāi)頭的參數(shù)是非穩(wěn)定參數(shù),隨時(shí)可能被修改或者移除。
官網(wǎng)解釋:
Options that are specified with -XX are not stable and are subject to change without notice.
-XX參數(shù)的常見(jiàn)語(yǔ)法有:
- -XX:+[PARAM], 開(kāi)啟該參數(shù)的功能,如-XX:+DisableExplicitGC,開(kāi)啟禁止顯式GC
- -XX:-[PARAM], 關(guān)閉該參數(shù)的功能,如-XX:-DisableExplicitGC,關(guān)閉禁止顯示GC
- -XX:PARAM=VALUE, 設(shè)置參數(shù)的值,如-XX:SurvivorRatio=80,設(shè)置eden/survivor的比值
關(guān)于"-XX"的常見(jiàn)參數(shù),見(jiàn)下面的按功能分類
按功能分類
標(biāo)記了※的表示常用參數(shù)
內(nèi)存參數(shù)
-Xmx[value] ※
設(shè)置堆內(nèi)存最大值
-Xmx1g
或者
-Xmx1024m
-Xms[value] ※
設(shè)置堆內(nèi)存最小值。一般與-Xmx設(shè)置一樣大
-Xmx1g
-Xmn[value] ※
設(shè)置新生代大小
-Xmn256m
-Xss[value] ※
設(shè)置棧空間大小
-Xss128k
-XX:SurvivorRatio=[value] ※
新生代Eden和Survivor劃分比例
-XX:SurvivorRatio=8
-XX:PermSize=[value] ※
設(shè)置永久代初始大小。JDK8中已移除
-XX:PermSize=128m
-XX:MaxPermSize=[value] ※
設(shè)置永久代最大值。JDK8中已移除
-XX:MaxPermSize=128m
-XX:MetaspaceSize=[value] ※
設(shè)置meta區(qū)大小。JDK8增加
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=[value] ※
設(shè)置永久代最大值。JDK8中已移除
-XX:MaxMetaspaceSize=128m
-XX:ReservedCodeCacheSize
用于設(shè)置Code Cache大小,JIT編譯的代碼都放在Code Cache中,若Code Cache空間不足則JIT無(wú)法繼續(xù)編譯,并且會(huì)去優(yōu)化,比如編譯執(zhí)行改為解釋執(zhí)行,由此,性能會(huì)降低
-XX:ReservedCodeCacheSize=128m
行為相關(guān)參數(shù)
Behavioral Options,即影響VM基本行為的參數(shù)
-XX:-DisableExplicitGC ※
GC參數(shù)
-XX:-UseSerialGC
使用串行垃圾回收器回收新生代
-XX:+UseParNewGC ※
使用并行垃圾回收器回收新生代
-XX:ParallerGCThreads
當(dāng)使用-XX:+UseParNewGC時(shí),該參數(shù)設(shè)定GC的線程數(shù),默認(rèn)與CPU核數(shù)相同
-XX:-UseParallelGC
使用Parallel Scavenge垃圾回收器
-XX:UseParallelGC = “Parallel Scavenge” + “Serial Old”
-XX:-UseParallelOldGC
用并行垃圾回收器進(jìn)行full gc
-XX:UseParallelOldGC = “Parallel Scavenge” + “Parallel Old”
-XX:-UseConcMarkSweepGC ※
使用CMS做為垃圾回收器
注:當(dāng)前常見(jiàn)的垃圾回收器組合是下面這種:
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-Xloggc:[path] ※
設(shè)置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更詳細(xì)的信息
輸出形式:
[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參數(shù)
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區(qū)/new區(qū)的比例,默認(rèn)為2
-XX:SurvivorRatio=n
eden/survivor的比值,默認(rèn)為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參數(shù)
-XX:-UseConcMarkSweepGC ※
使用CMS做為垃圾回收器
性能相關(guān)參數(shù)
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相關(guān)參數(shù)
Debugging Options
-XX:+PrintFlagsInitial
顯示JVM所有可設(shè)置的參數(shù)及它們的值
-XX:+PrintFlagsFinal
顯示所有可設(shè)置的參數(shù)及它們的值
可以設(shè)置的參數(shù)默認(rèn)是不包括diagnostic或experimental系的。要在-XX:+PrintFlagsFinal的輸出里看到這兩種參數(shù)的信息,分別需要顯式指定-XX:+UnlockDiagnosticVMOptions和-XX:+UnlockExperimentalVMOptions。
語(yǔ)法:
java -PrintFlagsFinal -version {id}
添加-version是防止被理解成啟動(dòng)java程序
輸出示例:
image.png
-XX:ErrorFile=[path] ※
生成error 文件的路徑
-XX:ErrorFile=/opt/logs/mobile/admin.error
-XX:+ShowMessageBoxOnError
當(dāng)jvm crash的時(shí)候在linux里會(huì)啟動(dòng)gdb 去分析和調(diào)式,適合在測(cè)試環(huán)境中使用
-XX:+HeapDumpOnOutOfMemoryError ※
OOM的時(shí)候dump出內(nèi)存。
-XX:HeapDumpPath
dump文件位置
Q & A
Q: -Xss和-XX:ThreadStackSize有啥區(qū)別?
A: 本質(zhì)上是沒(méi)有區(qū)別的。-Xss是在HotSpot出現(xiàn)之前就存在的,而-XX:ThreadStackSize是HotSpot的內(nèi)置參數(shù)。也就是說(shuō)-Xss適用于很多VM,包括HotSpot,而-XX:ThreadStackSize只適用于HotSpot。
另外,使用jinfo的時(shí)候,應(yīng)該使用ThreadStackSize:
jinfo -float ThreadStackSize [pid]
?
作者:齊晉
鏈接:https://www.jianshu.com/p/1c6b5c2e95f9
來(lái)源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。
轉(zhuǎn)載于:https://www.cnblogs.com/xuningchuanblogs/p/11441554.html
總結(jié)
以上是生活随笔為你收集整理的JVM 参数及各部分含义(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JVM 常用参数一览表(转)
- 下一篇: Python单例设计模式