天天看點

JVM

為什麼要了解jvm記憶體管理機制

jvm自動的管理記憶體的配置設定與回收,這會在不知不覺中浪費很多記憶體,導緻jvm花費很多時間去進行垃圾回收(gc) -- gc機制還是不完美?

記憶體洩露,導緻jvm記憶體最終不夠用 

1.堆(1/4)+非堆(1/4)=jvm記憶體(1/2)

jvm記憶體,我們知道jvm記憶體分為堆和非堆兩部分,那麼jvm記憶體就是這兩個區域的記憶體和,也是java語言涉及到的記憶體。堆記憶體最大可以配置設定到實體記憶體的1/4,非堆記憶體最大同樣也可以配置設定到實體記憶體的1/4,那麼jvm記憶體最大就是可以配置設定到記憶體的1/2.

2. 堆(開發人員) / 非堆(jvm自己用的)

簡單來說堆就是java代碼可及的記憶體,是留給開發人員使用的;非堆就是jvm留給自己用的,是以方法區、jvm内部處理或優化所需的記憶體(如jit編譯後的代碼緩存)、每個類結構(如運作時常數池、字段和方法資料)以及方法和構造方法的代碼都在非堆記憶體中。

3. java -x

 x選項:比如-xms。這類選項都是以-x開頭,可能由于這個原因它們被稱為x選項。運作java -x指令可以看到所有的x選項。

 xx選項:這類選項是屬于實驗性,主要是給jvm開發者用于開發和調試jvm的。