wordpress 全站不刷新百度識圖入口
JVM(Java虛擬機)參數(shù)用于調(diào)整和優(yōu)化Java應(yīng)用程序的性能和行為。這些參數(shù)主要分為標準參數(shù)、非標準參數(shù)(以-X開頭)和高級參數(shù)(以-XX開頭)。以下是一些常見的JVM參數(shù)及其使用方法:
標準參數(shù)
- -server:啟動JVM時使用服務(wù)器模式,適用于生產(chǎn)環(huán)境,具有更好的性能和內(nèi)存管理效率。
- -client:啟動JVM時使用客戶端模式,適用于桌面應(yīng)用程序或開發(fā)測試環(huán)境,啟動速度較快。
- -verbose:class:輸出JVM載入類的相關(guān)信息,有助于診斷類加載問題。
- -verbose:gc:輸出每次垃圾回收(GC)的相關(guān)情況,有助于了解JVM的內(nèi)存管理行為。
- -verbose:jni:輸出本地方法調(diào)用的相關(guān)情況,有助于診斷JNI調(diào)用錯誤信息。
- -classpath 或 -cp:指定類路徑,可以包括多個目錄和JAR文件。
- -version 或 -showversion:顯示JVM版本信息。
非標準參數(shù)(-X參數(shù))
- -Xms:設(shè)置JVM初始堆內(nèi)存大小,單位為MB或G。例如,-Xms512m表示設(shè)置初始堆內(nèi)存為512MB。
- -Xmx:設(shè)置JVM最大堆內(nèi)存大小,單位為MB或G。例如,-Xmx2g表示設(shè)置最大堆內(nèi)存為2GB。建議在線上生產(chǎn)環(huán)境中,將-Xms和-Xmx設(shè)置為相同的值,以避免內(nèi)存抖動。
- -Xmn:設(shè)置新生代內(nèi)存大小,包括Eden區(qū)和兩個Survivor區(qū)的總和。這個參數(shù)會影響JVM的內(nèi)存分配和垃圾回收行為。
- -Xss:設(shè)置線程堆棧大小,單位為KB。例如,-Xss128k表示設(shè)置線程堆棧大小為128KB。
- -Xloggc::將每次GC事件的相關(guān)情況記錄到一個文件中,有助于分析JVM的內(nèi)存管理行為。
- -Xint:僅解釋模式執(zhí)行,JVM不會進行即時編譯。
- -Xmixed:混合模式執(zhí)行,默認模式,JVM會進行即時編譯和解釋執(zhí)行。
高級參數(shù)(-XX參數(shù))
- -XX:NewSize=:設(shè)置新生代對象生成時占用內(nèi)存的默認值。
- -XX:MaxNewSize=:設(shè)置新生成對象能占用內(nèi)存的最大值。
- -XX:PermSize=:設(shè)置永久代(PermGen)的初始大小,單位為MB。在JDK 8及更高版本中,永久代被元空間(Metaspace)替代。
- -XX:MaxPermSize=:設(shè)置永久代(PermGen)的最大大小,單位為MB。在JDK 8及更高版本中,此參數(shù)不再使用。
- -XX:MetaspaceSize=:設(shè)置元空間的初始大小,單位為MB。元空間用于存儲類的元數(shù)據(jù)。
- -XX:NewRatio=:設(shè)置新生代與老生代的內(nèi)存容量比例。例如,-XX:NewRatio=4表示新生代與老生代的比例為1:4。
- -XX:SurvivorRatio=:設(shè)置Eden區(qū)與Survivor區(qū)的容量比值。例如,-XX:SurvivorRatio=8表示Eden區(qū)與兩個Survivor區(qū)的比例為8:1:1。
- -XX:+HeapDumpOnOutOfMemoryError:在JVM遇到內(nèi)存溢出異常(OOM)時生成堆轉(zhuǎn)儲文件,有助于分析內(nèi)存泄漏問題。
- -XX:HeapDumpPath=
:指定導出堆信息時的路徑或文件名。 - -XX:+UseConcMarkSweepGC:啟用CMS垃圾收集器,適用于對響應(yīng)時間要求較高的應(yīng)用場景。
- -XX:+UseG1GC:啟用G1垃圾收集器,適用于需要處理大量內(nèi)存和減少停頓時間的應(yīng)用場景。
- -XX:+PrintGC:在控制臺上打印出GC信息。
- -XX:+PrintGCDetails:在控制臺上打印出詳細的GC信息,包括各個內(nèi)存區(qū)域的分配和回收情況。
- -XX:+PrintGCTimeStamps:打印每次GC的時間戳,有助于了解GC的執(zhí)行時間。
- -XX:MaxGCPauseMillis=:設(shè)置最大GC暫停時間的目標(以毫秒為單位),JVM會嘗試在滿足該目標的前提下進行垃圾回收。
使用方法
- 在開發(fā)工具中設(shè)置:如IDEA、Eclipse等IDE,可以在運行配置中設(shè)置JVM參數(shù)。
- 在命令行中運行JAR包時設(shè)置:使用java命令運行JAR包時,可以在命令后添加JVM參數(shù)。例如:
java -Xmx1024m -Xms1024m -jar xxx.jar
- 在Tomcat容器中設(shè)置:在Tomcat的啟動腳本(如catalina.sh)中設(shè)置JAVA_OPTS環(huán)境變量,以指定JVM參數(shù)。例如:
JAVA_OPTS="-server -Xms8g -Xmx8g -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/gclogs/dump/heap.hprof -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/usr/local/gclogs/gc.log -XX:+DisableExplicitGC"
了解并掌握這些JVM參數(shù)的使用方法,有助于優(yōu)化Java應(yīng)用程序的性能和內(nèi)存管理行為。