天天看點

JVM記憶體模型(堆記憶體初始化)

一、JVM堆記憶體初始化

在Java運作的時候Jvm會自動為堆區配置設定記憶體空間,我們可以把這個配置設定的記憶體空間分為兩種概念來描述:最大記憶體和初始化記憶體,初始化記憶體就是可以直接使用的記憶體,最大記憶體就是初始化的記憶體加上可伸縮的記憶體,當初始化記憶體不夠使用的時候會往伸縮區開辟空間,但是如果經過GC之後發現記憶體不緊張了,此時又會将部分記憶體變為伸縮區,這樣這每次GC之後可能要重新計算堆記憶體的空間比例和大小,這樣是很耗費時間的(自然耗費性能)

JVM記憶體模型(堆記憶體初始化)

DEMO:觀察堆記憶體的配置設定(最大記憶體和初始化記憶體)

JVM記憶體模型(堆記憶體初始化)

其實_上最大記憶體預設是實體記憶體的四分之一,初始化記憶體預設是實體記憶體的六十四分之一(不是準确的,隻是大概)

上面說了當GC之後要重新計算堆記憶體空間,這樣會耗費性能,如果要避免這個問題可以讓伸縮區的記憶體在--開始就不要存在,直接讓伸縮區所占的空間直接為初始化的記憶體(如果說項目不嚴格),隻需要簡單的對記憶體進行調優的話可以讓初始化記憶體等于最大記憶體即可。這需要使用兩個參數進行配置:

-Xms:初始化記憶體

-Xmx:最大記憶體

DEMO:配置參數,

JVM記憶體模型(堆記憶體初始化)

配置參數的時候每個參數和參數值之,間不能出現空格。一般情況将初始化記憶體和最大記憶體配置相等,在一定程度上可以節省資源,但是如果項目要求很高那麼還需要配置其他參數,比如說棧記憶體的大小等等,這是根據項目和伺服器多方決定的。這個配置屬于JVM記憶體調優的話題。

以下是我整理的Java學習資料免費提供

JVM記憶體模型(堆記憶體初始化)

對于剛學習Java的初學者,很多适合會感覺學的沒有方向,越學越迷茫,這樣的情況一般都是學習方法開始就是錯誤的。沒有把Java技術進行專業系統化的學習。從就業和節約時間的角度考慮,如果有誰遇到這方面的問題,可以加入我的學習QQ裙:927296445 裡面有相應的學習資料【Java最新基礎精講視訊、面試題目、開發工具、PDF文檔等】,可以自行來下載下傳擷取(适合初學者)多跟大家一起交流,不要一個人盲目的學,少走彎路才是學習Java最大的捷徑

首發知乎碼邦主原創