1. 程式人生 > >JVM 常用參數

JVM 常用參數

xmx 系統 使用實例 虛擬機棧 space 次數 from gcd 提高

常見參數配置
  • -XX:+PrintGC 每次觸發GC的時候打印相關日誌
  • -XX:+UseSerialGC 串行回收
  • -XX:+PrintGCDetails 更詳細的GC日誌
  • -Xms 堆初始值
  • -Xmx 堆最大可用值
  • -Xmn 新生代堆最大可用值
  • -XX:SurvivorRatio 用來設置新生代中eden空間和from/to空間的比例.
  • -XX:NewRatio 配置新生代與老年代占比 1:2
  • -XX:SurvivorRatio 用來設置新生代中eden空間和from/to空間的比例

總結:在實際工作中,我們可以直接將初始的堆大小與最大堆大小相等,這樣的好處是可以減少程序運行時垃圾回收次數,從而提高效率

堆內存大小配置

使用示例: -Xmx20m -Xms5m

當前堆最大內存 20M,堆初始化內存 5M

設置新生代比例參數

使用示例:-Xms20m -Xmx20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC

當前堆最大內存 20M,初始化堆內存 20M,新生代最大可用內存 1M,Eden 區域和 form、to 區域的比例是 2:1:1,打印 GC 日誌,使用串行回收

設置新生代與老年代比例參數

使用實例:-Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:NewRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC

當前堆最大內存 20M,初始化堆內存 20M,Eden 區域和 form、to 區域的比例是 2:1:1,新生代和老年代比例是 1:2,打印 GC 日誌,使用串行回收

Java堆溢出

錯誤原因:java.lang.OutOfMemoryError: Java heap space 堆內存溢出

設置合適的堆大小:-Xms1m -Xmx100m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

最後的參數表示堆內存溢出出打印快照

虛擬機棧溢出

錯誤原因:java.lang.StackOverflowError 棧內存溢出

虛擬機棧溢出發生在遞歸調用,循環不會產生虛擬機棧溢出,除非循環裏面嵌套遞歸

設置更大的深度,默認深度大概在 10000 左右

-Xss5m 設置最大調用深度

內存溢出與內存泄漏區別

內存溢出:申請空間超出系統能夠提供的空間大小

內存泄露:內存泄露是指程序中間動態分配了內存,但在程序結束時沒有釋放這部分內存,從而造成那部分內存不可用的情況,最終導致內存溢出

JVM 常用參數