天天看點

JVM核心參數圖解

前言

作為一名Java開發工程師,基本上都要接觸到JVM,實際開發中也許也會遇到JVM的相關問題,面試中肯定也會問到JVM的相關知識。是以今天這篇主要分享JVM的各個參數所代表的意思并且通過圖解的方式幫助讀者更加好了解。

JVM核心參數

在JVM裡有幾個比較核心的參數,今天就主要來講這幾個:

-Xms:JVM初始堆記憶體大小

-Xmx:JVM堆記憶體的最大值

-Xmn:JVM中新生代大小

-XX:PermSize:永久代大小

-XX:MaxPermSize:永久代最大值

-Xss:JVM每個線程的大小

下面我們就對上面列舉的幾個核心參數進行說明。

1、-Xms和-Xmx分别表示JVM初始堆記憶體大小和堆記憶體最大值

這兩個參數主要作用就是限定JVM中堆記憶體的大小。

JVM核心參數圖解

2、-Xmn:表示JVM堆記憶體中新生代的大小

一般設定完堆記憶體,然後用堆記憶體-新生代大小=老年代大小

JVM核心參數圖解

3、-XX:PermSize和-XX:MaxPermSize,分别代表永久代的大小和永久代的最大值

如果在JDK8以後,永久代被元空間替代了,是以這兩個參數變成了-XX:MetaspaceSize和-XX:MaxMetaspaceSize。這兩個參數就是限定永久代的大小。

實際用元空間代替永久代可以避免OOM,因為元空間用的是本地記憶體,不同于永久代是有上限的。更深層的原因是要合并HotSpot和JRockit,然後JRockit沒有永久代,是以就使用了元空間。

JVM核心參數圖解

4、-Xss:這個參數限定了JVM每個參數的大小

每個線程都有自己一個虛拟機棧,每次執行一個方法,就會把方法的棧幀壓入棧中,方法執行完,該棧幀就會從線程裡的棧出棧

JVM核心參數圖解

啟動系統的時候配置JVM參數

在自己的編譯器(以Idea舉例)設定啟動時JVM參數,可以加快Idea的編譯速度

在啟動的main類選擇Edit Configurations,然後在VM options配置JVM參數即可

JVM核心參數圖解
JVM核心參數圖解

除了以上的方法外,還有第二種方法是打開idea.vmoptions修改配置資訊,一般在idea的Help菜單下的Edit Custom VM Options

JVM核心參數圖解

把編譯器的堆記憶體改大就可以使編譯速度提高(當然也不是絕對的,大部分情況下可以)

線上部署應用的時候如何指定JVM參數

這個其實就很簡單,舉例采用"java -jar"的方式啟動應用,可以采用以下的方式:

java -Xms512M -Xmx512M -Xmn256M -Xss1M -XX:PermSize=128M -XX:MaxPermSize=128M -jar test.jar
           

其他方式部署的也是可以配置啟動參數,感興趣可以自行了解。

最後分享

分享了JVM的核心參數之後,最後想說一句,其實JVM參數該如何配置,應該是根據不同的業務具體的一些場景來決定的,而不是說有一個固定的配置子產品,一切都要從業務場景出發。