java啓動參數共分爲三類;
其一是標準參數(-),全部的JVM實現都必須實現這些參數的功能,並且向後兼容;
其二是非標準參數(-X),默認jvm實現這些參數的功能,可是並不保證全部jvm實現都知足,且不保證向後兼容;
其三是非Stable參數(-XX),此類參數各個jvm實現會有所不一樣,未來可能會隨時取消,須要慎重使用;html
-XX:+<option> 啓用option,例如:-XX:+PrintGCDetails啓動打印GC信息的選項,其中+號表示true,開啓的意思 -XX:-<option> 不啓用option,例如:-XX:-PrintGCDetails關閉啓動打印GC信息的選項,其中-號表示false,關閉的意思 -XX:<option>=<number> 設定option的值爲數字類型,可跟單位,例如 32k, 1024m, 2g。例如:-XX:MaxPermSize=64m -XX:<option>=<string> 設定option的值爲字符串,例如: -XX:HeapDumpPath="C:\Users\Daxin\Desktop\jvmgcin"
1.設置環境變量JAVA_OPTSjava
2.Windows下,在/bin/catalina.bat,Unix下,在/bin/catalina.sh的前面,增長 JAVA_OPTS=’-Xms256m -Xmx512m’linux
Tomcat 的啓動參數位於安裝目錄 ${TOMCAT_HOME}/bin目錄下,Linux 操做系統就是 catalina.sh 文件。JAVA_OPTS,就是用來設置 JVM 相關運行參數的變量,還能夠在 CATALINA_OPTS 變量中設置。關於這 2 個變量,仍是多少有些區別的:segmentfault
JAVA_OPTS:用於當 Java 運行時選項「start」、「stop」或「run」命令執行。緩存
CATALINA_OPTS:用於當 Java 運行時選項「start」或「run」命令執行。tomcat
爲何有兩個不一樣的變量?它們之間都有什麼區別呢?服務器
首先,在啓動 Tomcat 時,任何指定變量的傳遞方式都是相同的,能夠傳遞到執行「start」或「run」命令中,但只有設定在 JAVA_OPTS 變量裏的參數被傳遞到「stop」命令中。對於 Tomcat 運行過程,可能沒什麼區別,影響的是結束程序,而不是啓動程序。多線程
第二個區別是更微妙,其餘應用程序也可使用 JAVA_OPTS 變量,但只有在 Tomcat 中使用 CATALINA_OPTS 變量。若是你設置環境變量爲只使用 Tomcat,最好你會建議使用 CATALINA_OPTS 變量,而若是你設置環境變量使用其它的 Java 應用程序,例如 JBoss,你應該把你的設置放在JAVA_OPTS 變量中。併發
我在本地配置的:jvm
-server ## 服務器模式 -Xms2g ## 初始化堆內存大小 -Xmx2g ## 堆內存最大值 -Xmn256m ## 年輕代內存大小,整個JVM內存=年輕代 + 年老代 + 持久代 -Xss256k ## 設置每一個線程的堆棧大小 -XX:PermSize=256m ## 持久代內存大小 -XX:MaxPermSize=256m ## 最大持久代內存大小 -XX:ReservedCodeCacheSize=256m ## 代碼緩存,存儲已編譯方法生成的本地代碼 -XX:+UseCodeCacheFlushing ## 代碼緩存滿時,讓JVM放棄一些編譯代碼 -XX:+DisableExplicitGC ## 忽略手動調用GC, System.gc()的調用就會變成一個空調用,徹底不觸發GC -Xnoclassgc ## 禁用類的垃圾回收,性能會高一點 -XX:+UseConcMarkSweepGC ## 併發標記清除(CMS)收集器 -XX:+CMSParallelRemarkEnabled ## 啓用並行標記,下降標記停頓 -XX:+UseParNewGC ## 對年輕代採用多線程並行回收,這樣收得快 -XX:+UseCMSCompactAtFullCollection ## 在FULL GC的時候對年老代的壓縮,Full GC後會進行內存碎片整理,過程沒法併發,空間碎片問題沒有了,但提頓時間不得不變長了 -XX:CMSFullGCsBeforeCompaction=3 ## 多少次Full GC 後壓縮old generation一次 -XX:LargePageSizeInBytes=128m ## 內存頁的大小 -XX:+UseFastAccessorMethods ## 原始類型的快速優化 -XX:+UseCMSInitiatingOccupancyOnly ## 使用設定的回收閾值(下面指定的70%)開始CMS收集,若是不指定,JVM僅在第一次使用設定值,後續則自動調整 -XX:CMSInitiatingOccupancyFraction=70 ## 使用cms做爲垃圾回收使用70%後開始CMS收集 -XX:SoftRefLRUPolicyMSPerMB=50 ## Soft reference清除頻率,默認存活1s,設置爲0就是不用就清除 -XX:+AlwaysPreTouch ## 強制操做系統把內存真正分配給JVM -XX:+PrintClassHistogram ## 按下Ctrl+Break後,打印類的信息 -XX:+PrintGCDetails ## 輸出GC詳細日誌 -XX:+PrintGCTimeStamps ## 輸出GC的時間戳(以基準時間的形式) -XX:+PrintHeapAtGC ## 在進行GC的先後打印出堆的信息 -XX:+PrintGCApplicationConcurrentTime ## 輸出GC之間運行了多少時間 -XX:+PrintTenuringDistribution ## 參數觀察各個Age的對象總大小 -XX:+PrintGCApplicationStoppedTime ## GC形成應用暫停的時間 -Xloggc:../log/gc.log ## 指定GC日誌文件的輸出路徑 -ea ## 打開斷言機制,jvm默認關閉 -Dsun.io.useCanonCaches=false ## java_home沒有配置,或配置錯誤會報異常 -Dsun.awt.keepWorkingSetOnMinimize=true ## 可讓IDEA最小化到任務欄時依然保持以佔有的內存,當你從新回到IDEA,可以被快速顯示,而不是由灰白的界面逐漸顯現整個界面,加快回復到原界面的速度 -Djava.net.preferIPv4Stack=true ## 讓tomcat默認使用IPv4 -Djdk.http.auth.tunneling.disabledSchemes="" ## 等於Basic會禁止proxy使用用戶名密碼這種鑑權方式,反之空就可使用 -Djsse.enablesSNIExtension=false ## SNI支持,默認開啓,開啓會形成ssl握手警告 -XX:+HeapDumpOnOutOfMemoryError ## 表示當JVM發生OOM時,自動生成DUMP文件 -XX:HeapDumpPath=D:/data/log ## 表示生成DUMP文件的路徑,也能夠指定文件名稱,若是不指定文件名,默認爲:java_<pid>_<date>_<time>_heapDump.hprof。 -XX:-OmitStackTraceInFastThrow ## 省略異常棧信息從而快速拋出,這個配置拋出這個異常很是快,不用額外分配內存,也不用爬棧,可是出問題看不到stack trace,不利於排查問題 -Dfile.encoding=UTF-8 -Duser.name=qhong
其餘暫時沒用到的:
NewRatio:3 ## 新生代與年老代的比例。好比爲3,則新生代佔堆的1/4,年老代佔3/4。 SurvivorRatio:8 ## 新生代中調整eden區與survivor區的比例,默認爲8,即eden區爲80%的大小,兩個survivor分別爲10%的大小。 PretenureSizeThreshold:10m ## 晉升年老代的對象大小。默認爲0,好比設爲10M,則超過10M的對象將不在eden區分配,而直接進入年老代。 MaxTenuringThreshold:15 ## 晉升老年代的最大年齡。默認爲15,好比設爲10,則對象在10次普通GC後將會被放入年老代。 -XX:MaxTenuringThreshold=0 ## 垃圾最大年齡,若是設置爲0的話,則年輕代對象不通過Survivor區,直接進入年老代,該參數只有在串行GC時纔有效 -XX:+HeapDumpBeforeFullGC ## 當JVM 執行 FullGC 前執行 dump -XX:+HeapDumpAfterFullGC ## 當JVM 執行 FullGC 後執行 dump -XX:+HeapDumpOnCtrlBreak ## 交互式獲取dump。在控制檯按下快捷鍵Ctrl + Break時,JVM就會轉存一下堆快照 -XX:+PrintGC ## 輸出GC日誌 -verbose:gc ## 同PrintGC,輸出GC日誌 -XX:+PrintGCDateStamps ## 輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintFlagsInitial ## 顯示全部可設置參數及默認值 -enablesystemassertions ## 激活系統類的斷言 -esa ## 同上 -disablesystemassertions ## 關閉系統類的斷言 -dsa ## 同上 -XX:+ScavengeBeforeFullGC ## FullGC前回收年輕代內存,默認開啓 -XX:+CMSScavengeBeforeRemark ## CMS remark前回收年輕代內存 -XX:+CMSIncrementalMode ## 採用增量式的標記方式,減小標記時應用停頓時間 -XX:+CMSClassUnloadingEnabled ## 相對於並行收集器,CMS收集器默認不會對永久代進行垃圾回收。若是但願回收,就使用該標誌,注意,即便沒有設置這個標誌,一旦永久代耗盡空間也會嘗試進行垃圾回收,可是收集不會是並行的,而再一次進行Full GC -XX:+CMSConcurrentMTEnabled ## 當該標誌被啓用時,併發的CMS階段將以多線程執行(所以,多個GC線程會與全部的應用程序線程並行工做)。該標誌已經默認開啓,若是順序執行更好,這取決於所使用的硬件,多線程執行能夠經過-XX:-CMSConcurremntMTEnabled禁用。
Xms與Xmx配置相同的值,爲了可以在GC後不須要從新分隔計算堆區的大小而浪費資源。