JVM學習系列學習二
知識
07-01
查看JVM的運行參數
在有些時候我們需要查看JVM的運行參數,這個需求可能有以下兩種情況:
1:運行Java命令時候列印出運行參數
2:查看正在運行的Java進程中的參數。
運行Java命令時候列印參數:
運行Java命令時候列印參數,需要添加-XX: PrintFlagsFinal參數即可。
三:JVM內存模型
JVM的內存模型在1.7和1.8之間有較大的區別。我們先來看看1.7的堆內存模型。
下圖就是JDK1.7堆內存模型:
簡圖:
Young年輕代:
在Java中絕大多數新建的Object對象,都是在年輕代區的。先進入eden區。當Eden內存滿了之後,會執行一次或多次GC回收之後,沒有被回收掉的對象將會被移動到S0或者S1區。
註:Eden的S0、S1的比例為:8:1:1
Tenure(Old Memory)老年代:
在被執行多次GC之後,任然沒有沒回收的對象,將會被從S0或S1區移動到Old內存區。
Perm(Perm Gen):永久區—在JDK1.8之後就沒有這個了。
永久區是一個特殊的JVM內存區。這個區域是用來存儲描述Class的元數據。
拋出:java.lang.OutOfMemoryError:PermGen。這個異常的時候,無論怎麼設置-Xmx也不管用的。如果想設置這個區域大小參數使用的是:-XX:PermGen,-XX:MaxpermGen(不同版本略有變化)。
下節預告:
1:堆、棧、永久區比較
2:內存管理優化參數
TAG:凱哥java |