JVM調優簡單梳理,一分鐘瞭解JVM調優

一、JVM內存模型?
JVM把內存劃分爲堆,載,方法區。

堆:堆是所有線程共享,虛擬機啓動時創建,主要存放對象和數組,所佔內存比較大。
       堆結構包含年輕代,老年代和持久代,其中年輕代又分爲Eden區和2個Survivor區(幸運區)。
       -Xms=***    堆初始化空間大小,默認內存的1/64
       -Xmx=***    堆空間最大值

       -XX:NewSize=***    新生代空間大小
       -XX:MaxNewSize=***   新生代空間最大值
       -Xmn=***     新生代空間大小,這裏包含From、To兩個Survivor區(比例:8:1:1)。           
       

棧:棧是線程獨享的。生命週期和線程相同,主要存儲局部變量和參數等信息。當系統創建一個線程時,會爲該線程分配一個棧空間,
       程序在每次調用一個方法時,會爲每個方法創建一個棧幀並PUSH到當前線程對應的棧中。
       -Xss=***  棧空間大小       

方法區:方法區是線程共享的,主要存儲類的信息、常量、靜態變量等信息;JDK1.8之後方法區移除,方法去的數據都遷移至元空間,
              元空間和方法區類似,不同的是,方法區是在虛擬機中,而元數據是存儲在本地內存中。
              -XX:PermSize=***
              -XX:MaxPermSize=***

              -XX:MetaspaceSize=***
              -XX:MaxMetaspaceSize=***


二、GC回收?
GC回收分爲2中,一種是Minor GC,也就是年輕代GC(YGC),一種Major GC, 也就是FULLGC。
無論是YGC還是FULLGC都會使得程序暫停,而進行GC回收活動。所以我們應避免系統出現頻繁的YGC和FULLGC,以及儘量降低GC時長。

因此在做JVM調優時,我們可以從幾個方面入手:
第一、優化代碼邏輯,儘量少創建一次性對象,特別是內存佔用較大的對象
第二、對於頻繁使用的對象,我們可以建立一個對象池,從而避免頻繁的創建對象和回收對象。
第三、可以調整堆大小


三、常用調優工具?

我常用調優GUI工具(JDK自帶):jconsole   jVisualVM

 

以上是對JVM調優的簡單梳理,更多詳細的,請自行探索 ~_~!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章