1. 程式人生 > 其它 >java xms xmx xss xmn作用

java xms xmx xss xmn作用

XmnXmsXmxXss有什麼區別

Xmn、Xms、Xmx、Xss都是JVM對記憶體的配置引數,我們可以根據不同需要區修改這些引數,以達到執行程式的最好效果。

-Xms 堆記憶體的初始大小,預設為實體記憶體的1/64

-Xmx 堆記憶體的最大大小,預設為物理記憶體的1/4

-Xmn 堆內新生代的大小。通過這個值也可以得到老生代的大小:-Xmx減去-Xmn

-Xss 設定每個執行緒可使用的記憶體大小,即棧的大小。在相同實體記憶體下,減小這個值能生成更多的執行緒,當然作業系統對一個程序內的執行緒數還是有限制的,不能無限生成。執行緒棧的大小是個雙刃劍,如果設定過小,可能會出現棧溢位,特別是在該執行緒內有遞迴、大的迴圈時出現溢位的可能性更大,如果該值設定過大,就有影響到建立棧的數量,如果是多執行緒的應用,就會出現記憶體溢位的錯誤。


除了這些配置,JVM還有非常多的配置,常用的如下:

  1. 堆設定
    • -Xms:初始堆大小
    • -Xmx:最大堆大小
    • -Xmn:新生代大小
    • -XX:NewRatio:設定新生代和老年代的比值。如:為3,表示年輕代與老年代比值為1:3
    • -XX:SurvivorRatio:新生代中Eden區與兩個Survivor區的比值。注意Survivor區有兩個。如:為3,表示Eden:Survivor=3:2,一個Survivor區佔整個新生代的1/5  
    • -XX:MaxTenuringThreshold:設定轉入老年代的存活次數。如果是0,則直接跳過新生代進入老年代
    • -XX:PermSize、-XX:MaxPermSize:分別設定永久代最小大小與最大大小(Java8以前)
    • -XX:MetaspaceSize、-XX:MaxMetaspaceSize:分別設定元空間最小大小與最大大小(Java8以後)
  2. 收集器設定
    • -XX:+UseSerialGC:設定序列收集器
    • -XX:+UseParallelGC:設定並行收集器
    • -XX:+UseParalledlOldGC:設定並行老年代收集器
    • -XX:+UseConcMarkSweepGC:設定併發收集器
  3. 垃圾回收統計資訊
    • -XX:+PrintGC
    • -XX:+PrintGCDetails
    • -XX:+PrintGCTimeStamps
    • -Xloggc:filename
  4. 並行收集器設定
    • -XX:ParallelGCThreads=n:設定並行收集器收集時使用的CPU數。並行收集執行緒數。
    • -XX:MaxGCPauseMillis=n:設定並行收集最大暫停時間
    • -XX:GCTimeRatio=n:設定垃圾回收時間佔程式執行時間的百分比。公式為1/(1+n)
  5. 併發收集器設定
    • -XX:+CMSIncrementalMode:設定為增量模式。適用於單CPU情況。
    • -XX:ParallelGCThreads=n:設定併發收集器新生代收集方式為並行收集時,使用的CPU數。並行收集執行緒數