您好,登錄后才能下訂單哦!
? 用途:
每個線程都有一個程序計數器,用于記錄該線程當前所執行字節碼的行號。
natice方法由于不是java方法,因此當執行native方法時計數器為空。
? 創建時間:
線程啟動的同時
? 銷毀時間:
線程銷毀的同時
? 特點:
線程私有,唯一一個java虛擬機規范中沒有規定OutOfMemeryError的內存區域。生命周期與線程相同。
? 用途:
每個方法執行的時都會創建一個棧幀用于存儲局部變量表(顧名思義,就是存儲該方法的局部變量對象的引用),操作數棧,動態鏈接,方法出口等信息。每一個方法從執行到完成就對應一個棧幀在虛擬機棧從入棧到出棧的過程。
? 創建時間:
線程啟動的同時
? 銷毀時間:
線程銷毀的同時
? 特點:
線程私有。每一個方法從執行到完成就對應一個棧幀在虛擬機棧從入棧到出棧的過程。虛擬機棧服務于java方法。
? 溢出異常:
StackOverflowError:當線程請求的棧深度大于虛擬機所允許的深度時,拋出該異常。
OutOfMemeoryError:如果虛擬機棧可以動態擴展,那么當動態擴展時無法申請到足夠的內存,就會拋出該異常。
? 內存大小設置方式:-Xss
如-Xss256K: 就是設置每個線程的運行時棧的大小為 256K。
固定了棧內存大小后,當方法的局部變量表內容越多,棧幀越大,棧深度越小。
? 簡單的棧幀出入棧模型:
? 用途:
本地方法棧的作用與虛擬機棧的作用相似,但是本地方法棧是為虛擬機中使用到的Native方法服務的。
? 創建時間
線程啟動的同時。
? 銷毀時間
線程銷毀的同時。
? 特點:
服務于Native方法。
? 溢出異常:
StackOverflowError:當線程請求的棧深度大于虛擬機所允許的深度時,拋出該異常。
OutOfMemeoryError:如果虛擬機棧可以動態擴展,那么當動態擴展時無法申請到足夠的內存,就會拋出該異常。
? 用途:
用于存放對象。
? 創建時間:
虛擬機啟動時。
? 銷毀時間:
虛擬機銷毀時。
? 特點:
1) 各線程共享;
2) 是垃圾收集器管理的主要區域。java堆可以處于物理上不連續的內存空間,只要邏輯上是連續的即可。
? 溢出異常:
OutOfMemeoryError:如果在堆中沒有完成實例分配,并且堆也無法再擴展時,將會拋出該異常。
? 內存大小設置方式:
-Xmx 設置最大堆內存。
-Xms 設置初始堆內存。
? 用途:
用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。
? 創建時間
虛擬機啟動時。
? 銷毀時間
虛擬機銷毀時。
? 特點:
所有線程共享。
HotSpot虛擬機1.8及以上版本,已將方法區從從永久代移出,取而代之使用的是元空間,元空間使用的是本地內存。
? 溢出異常:
OutOfMemeoryError:當方法區無法滿足內存分配需求時,將拋出該異常。
? 參數設置
"-XX:MaxMetaspaceSize" (JDK8):指定類元數據區的最大內存大小;
"-XX:MetaspaceSize" (JDK8):MetaspaceSize表示metaspace首次使用不夠而觸發FGC的閾值;
"-Xnolassgc":關閉CLASS的垃圾回收功能,就是虛擬機加載的類,即便是不使用,沒有實例也不會回收。
"-verbose:class"、"-XX:TraceClassLoading"、"-XX:TraceClassUnloading":查看類加載和卸載信息;
? 用途:
編譯期生成的各種字面量和符號引用。
? 特點:
屬于方法區中的一部分。
相對于Class文件的常量池,運行時常量池具有動態性,運行期間新的常量也會被放入池中。該特性被開發人員利用較多的是String類的intern()方法。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。