1. 運行時數據區
1)堆:線程共享,存放新建的對象。
2)方法區:線程共享,存放類信息、常量、靜態變量等。
3)虛擬機棧:線程獨立,又叫線程棧。用來存放線程內部的局部變量,先進後出FILO。棧由棧幀組成,棧幀又分爲:局部變量表,操做數棧,動態連接,方法出口。線程方法裏產生的較小的局部對象也可能存放在虛擬機棧中。局部變量表:存放局部變量。
棧幀:java爲每個方法,在棧內存裏分配一塊棧幀,用來隔離每一個方法裏的局部變量。
操做數棧:線程運行時,用於處理數據的臨時內存空間。
動態連接:
方法出口:記錄方法執行完成時返回當上級方法的執行位置。
4)本地方法棧:java調用本地方法(native 修飾的方法)時,分配的內存空間。
5)程序計數器:當前線程所執行的字節碼行號指示器,記錄代碼執行到哪一行java
2. 參數設置
堆:
-Xms 最小值。
-Xmx 最大值。
方法區:
-XX:MetaSpaceSize 默認 21M,當內存快滿的時候會進行gc,根據gc後剩餘的空間大小判 斷是否須要擴容。生產中通常設置成256M。
-XX:MaxMetaSpaceSize 默認 -1,不限制最大值。
棧:
-Xss 默認1M