JVM虛擬機參數

 

java啓動參數共分爲三類;java

其一是標準參數(-),全部的JVM實現都必須實現這些參數的功能,並且向後兼容;算法

其二是非標準參數(-X),默認jvm實現這些參數的功能,可是並不保證全部jvm實現都知足,且不保證向後兼容;併發

其三是非Stable參數(-XX),此類參數各個jvm實現會有所不一樣,未來可能會隨時取消,須要慎重使用;app

1、標準參數中比較有用的:jvm

 

2、非標準參數又稱爲擴展參數,通常用到最多的是性能

 

用-XX做爲前綴的參數列表在jvm中多是不健壯的,SUN也不推薦使用,後續可能會在沒有通知的狀況下就直接取消了;可是因爲這些參數中的確有不少是對咱們頗有用的,好比咱們常常會見到的-XX:PermSize、-XX:MaxPermSize等等;命令行

 

首先來介紹行爲參數:線程

參數及其默認值描述調試

-XX:-DisableExplicitGC禁止調用System.gc();但jvm的gc仍然有效日誌

-XX:+MaxFDLimit最大化文件描述符的數量限制

-XX:+ScavengeBeforeFullGC新生代GC優先於Full GC執行

-XX:+UseGCOverheadLimit在拋出OOM以前限制jvm耗費在GC上的時間比例

-XX:-UseConcMarkSweepGC對老生代採用併發標記交換算法進行GC

-XX:-UseParallelGC啓用並行GC

-XX:-UseParallelOldGC對Full GC啓用並行,當-XX:-UseParallelGC啓用時該項自動啓用

-XX:-UseSerialGC啓用串行GC

-XX:+UseThreadPriorities啓用本地線程優先級

串行(SerialGC)是jvm的默認GC方式,通常適用於小型應用和單處理器,算法比較簡單,GC效率也較高,但可能會給應用帶來停頓;

並行(ParallelGC)是指GC運行時,對應用程序運行沒有影響,GC和app二者的線程在併發執行,這樣能夠最大限度不影響app的運行;

併發(ConcMarkSweepGC)是指多個線程併發執行GC,通常適用於多處理器系統中,能夠提升GC的效率,但算法複雜,系統消耗較大;

性能調優參數列表:

 

參數及其默認值描述

-XX:LargePageSizeInBytes=4m設置用於Java堆的大頁面尺寸

-XX:MaxHeapFreeRatio=70GC後java堆中空閒量佔的最大比例

-XX:MaxNewSize=size新生成對象能佔用內存的最大值

-XX:MaxPermSize=64m老生代對象能佔用內存的最大值

-XX:MinHeapFreeRatio=40GC後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跟蹤類加載器約束的相關信息

 

設置堆Heap大小:

-Xms20m  最小20m

-Xmx20m  最大20m

設置java虛擬機棧和本地方法棧大小:

-Xss128k

設置方法區大小:

-XX:PermSize=10M   最小10M

-XX:MaxPermSize=10M 最大10M

設置直接內存大小若不設置默認和(-Xmx同樣大):

-XX:MaxDirectMemorySize=10M

當首次遭遇OOM時導出此時堆中相關信息:

-XX:-HeapDumpOnOutOfMemoryError

 

設置新生代大小:

-Xmn

Eden與Survivor區比例:

-XX:SurvivorRatio=

晉升老年代對象年齡

-XX:PretenureSizeThreshold=

 

CMS收集器提供了開關用來開啓內存碎片整理當空間不夠須要Full GC時觸發,默認開啓:

-XX:+UseCMSCompactAtFullCollection

還有另外一個參數用來設置多少次Full GC後整理一次內存碎片:

-XX:CMSFullGCsBeforeCompaction=4

打開GC日誌:

-XX:+PrintGCDetails

相關文章
相關標籤/搜索