柚子快報激活碼778899分享:內(nèi)存模型、JVM
柚子快報激活碼778899分享:內(nèi)存模型、JVM
Java 內(nèi)存模型
Java虛擬機在運行Java程序時,會管理著一塊內(nèi)存區(qū)域:運行時數(shù)據(jù)區(qū)。在運行時數(shù)據(jù)區(qū)里,會根據(jù)用途進行劃分:
Java虛擬機棧(棧區(qū))本地方法棧Java堆(堆區(qū))方法區(qū)程序計數(shù)器
Java 堆
Java 堆即堆內(nèi)存(Heap),是垃圾收集器管理的主要區(qū)域,因此也叫 GC 堆,是 JVM 內(nèi)存中最大,線程共享的,用于存放 Java 對象實例,從內(nèi)存回收的角度分為新生代和老年代,從內(nèi)存分配的角度,相當(dāng)于多個線程私有的分配緩沖區(qū)。在堆中沒有足夠內(nèi)存完成對象實例的分配和堆無法再擴展時,會拋出 OutOfMemoryError 異常
Java虛擬機棧
Java 虛擬機棧即棧內(nèi)存(Stack),是Stack、Java 方法執(zhí)行的內(nèi)存模型,是線程私有的,生命周期與線程相同。主要以棧幀的形式用于存儲 Java 方法執(zhí)行時的局部變量(含數(shù)據(jù)類型、對象的引用),在方法執(zhí)行結(jié)束后釋放。在虛擬機棧擴展無法申請到內(nèi)存空間時,拋出 OutOfMemoryError 異常。線程請求棧深度大于虛擬機允許的深度拋出 **StackOverflowError 異常。**每個 Java 方法執(zhí)行時都會創(chuàng)建一個棧幀,一個方法從被調(diào)用到執(zhí)行完成相當(dāng)于一個棧幀從入棧到出棧,局部變量表所需內(nèi)存空間在方法編譯時就會完成分配,在方法運行時不會改變大小
本地方法棧
與 Java虛擬機棧類似,區(qū)別在于:服務(wù)對象,即Java虛擬機棧為執(zhí)行 Java 方法服務(wù);本地方法棧為執(zhí)行 Native方法服務(wù)
方法區(qū)
方法區(qū)是堆的一個邏輯部分,為了與 Java 堆區(qū)分,又稱**"非堆"區(qū)域(Non-Heap),用于存儲已被虛擬機加載的類信息、常量、靜態(tài)變量等數(shù)據(jù),是線程共享的,該區(qū)域的內(nèi)存回收主要是針對運行時常量池和對類的卸載,又稱永久代**,回收條件苛刻,很少出現(xiàn)垃圾收集。當(dāng)方法區(qū)無法滿足內(nèi)存分配需求時,會拋出OutOfMemoryError異常 方法區(qū)內(nèi)部包含一個運行時的常量池,是方法區(qū)的一部分,用于存放類文件在編譯時生成的各種字面量和符號引用,具有動態(tài)性(運行時也可以添加新的常量),當(dāng)常量池?zé)o法申請到內(nèi)存時,會拋出OutOfMemoryError異常
程序計數(shù)器
當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器,通過改變計數(shù)器的值,來選取下一條執(zhí)行的字節(jié)碼指令,用于實現(xiàn)異常處理、線程恢復(fù)等基礎(chǔ)功能。程序計數(shù)器是線程私有的,內(nèi)存空間小。唯一一個在 JVM 中無任何 OutOfMemoryError 異常的內(nèi)存區(qū)域 為了使得線程切換后恢復(fù)到正確的執(zhí)行位置,每條線程都配有一個獨立的程序計數(shù)器,各個線程互不影響,獨立存儲的內(nèi)存區(qū)域
https://www.yuque.com/wanghl-suxaf/obsqmm/qw0dmf8yrbbqmu69
柚子快報激活碼778899分享:內(nèi)存模型、JVM
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。