JVM常用配置參數說明


堆設置

-Xms256M:初始堆大小256M,默認為物理內存的1/64

-Xmx1024M:最大堆大小1024M,默認為物理內存的1/4,等於與-XX:MaxHeapSize=64M

-Xmn64M:年輕代大小為64M(JDK1.4后支持),相當於同時設置NewSize和MaxNewSize為64M

-XX:NewSize=64M:初始年輕代大小

-XX:MaxNewSize=256M:最大年輕代大小(默認為堆最大值的1/3)

-XX:OldSize=64M:年老代大小64M(測試驗證JDK1.8.191該參數設置無效,JDK11下設置成功)

-XX:NewRatio=4:年老代:年輕代=4:1,默認值2

-XX:SurvivorRatio=8:年輕代中,2個Survivor區與1個Eden區比例=2:8,Survivor占新生代內存比例為1/5,默認值8

-XX:MaxHeapFreeRatio=70:堆內存使用率大於70時擴張堆內存,xms=xmx時該參數無效,默認值70

-XX:MinHeapFreeRatio=40:堆內存使用率小於40時縮減堆內存,xms=xmx時該參數無效,默認值40

備注:

堆大小=年輕代(Young Generation)+年老代(Old Generation),網上有同學將持久代歸為堆內存,感覺是錯誤的。

年輕代=伊甸園區(Eden Space) + 幸存者區(Survivor Space,Serial收集器有2個相同容量的幸存者區,分別叫From和To,G1收集器只有一個,此處是個人理解,不一定正確)。

 

持久代設置(共享內存的非堆區域)

-XX:PermSize=56M:初始分配的持久代容量,默認為物理內存的1/64(從1.8起,該參數已作廢,可使用-XX:MetaspaceSize替代)

-XX:MaxPermSize=56M:持久代的最大容量,默認為物理內存的1/4,設置值過小會導致java.lang.OutOfMemoryError: PermGen space錯誤。(從1.8起,該參數已作廢,可使用-XX:MaxMetaspaceSize替代)

 

元空間(共享內存的非堆區域,JDK1.8新增)

-XX:MetaspaceSize=64M:觸發FullGC閾值,默認21807104B,約20.8M,而且Metaspace內存容量到達該閾值后,每次擴容都有可能會觸發FullGC

-XX:MaxMetaspaceSize=512M:最大元空間大小,默認無限制

 

虛擬機線程堆棧

-Xss128k:設置JAVA線程堆棧大小為128k

 

GC相關

-Xnoclassgc:關閉JVM垃圾回收功能

-XX:+UseSerialGC:使用Serial垃圾收集器,單線程串型收集器(client模式默認垃圾收集器)

-XX:+UseParNewGCSerial收集器的多線程升級版

-XX:+UseParallelGC:使用Parallel垃圾收集器(JDK1.8默認收集器),優點吞吐量高

-XX:+UseConcMarkSweepGC:使用CMS垃圾收集器,優點低延遲

-XX:+UseG1GC:使用G1垃圾回收器(新一代,重點關注),優點低延遲

 

-XX:+PrintCommandLineFlags:打印虛擬機默認參數

-XX:+DisableExplicitGC:靜止Java程序中的FULL GC,如System.gc()

-XX:+PrintGCDetails:GC時打印詳細信息(JDK11已過期,新版本使用-Xlog:gc代替)

-XX:+PrintGC:GC時打印信息(JDK11已過期,新版本使用-Xlog:gc代替)

-XX:+PrintTenuringDistribution:用於顯示每次Minor GC(年輕代GC)時Survivor區中各個年齡段的對象的大小

-XX:InitialTenuringThreshol:年輕代對象轉換為老年代對象最小年齡值,默認值7,對象在堅持過一次Minor GC之后,年齡就加1

-XX:MaxTenuringThreshold:年輕代對象轉換為老年代對象最大年齡值,默認值15

-Xloggc:filename:將GC信息輸出到文件,帶時間戳(如:-Xloggc:E:\gc.txt,JKD11已過期,新版本使用-Xlog:gc:gc.txt代替,日志內容見下圖)

-XX:+PrintHeapAtGC:GC時打印堆前后信息

-Xlog:gc:輸出GC日志信息(JDK11新增)

 

其他

-XX:+HeapDumpOnOutOfMemoryError:內存溢出時Dump出當前堆內存快照

-XX:HeapDumpPath=filename:導出路徑(如:-XX:HeapDumpPath=E:/a.dump)

-XX:PretenureSizeThreshold=10240:對象大小超過10KB時直接在年老代分配內存。默認值0,單位字節,表示所有的對象都在年輕代eden區分配


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM