摘要:本文將帶大家詳細(xì)地了解關(guān)于JVM的一些知識點。
本文分享自華為云社區(qū)《【JVM】關(guān)于JVM,你需要掌握這些 | 一文徹底吃透JVM系列》,作者: 冰 河 。
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站制作、禪城網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、禪城網(wǎng)絡(luò)營銷、禪城企業(yè)策劃、禪城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供禪城建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
JDK 是用于支持 Java 程序開發(fā)的最小環(huán)境。
JRE 是支持 Java 程序運行的標(biāo)準(zhǔn)環(huán)境。
程序計數(shù)器(Program Counter Register)是一塊較小的內(nèi)存空間,可以看作是當(dāng)前線程所執(zhí)行字節(jié)碼的行號指示器。分支、循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等基礎(chǔ)功能都需要依賴這個計數(shù)器完成。
由于 Java 虛擬機(jī)的多線程是通過線程輪流切換并分配處理器執(zhí)行時間的方式實現(xiàn)的。為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都需要一個獨立的程序計數(shù)器,各線程之間的計數(shù)器互不影響,獨立存儲。
程序計數(shù)器是唯一一個沒有規(guī)定任何 OutOfMemoryError 的區(qū)域。
Java 虛擬機(jī)棧(Java Virtual Machine Stacks)是線程私有的,生命周期與線程相同。
虛擬機(jī)棧描述的是 Java 方法執(zhí)行的內(nèi)存模型:每個方法被執(zhí)行的時候都會創(chuàng)建一個棧幀(Stack Frame),存儲
每一個方法被調(diào)用到執(zhí)行完成的過程,就對應(yīng)著一個棧幀在虛擬機(jī)棧中從入棧到出棧的過程。
這個區(qū)域有兩種異常情況:
虛擬機(jī)棧為虛擬機(jī)執(zhí)行 Java 方法(字節(jié)碼)服務(wù)。
本地方法棧(Native Method Stacks)為虛擬機(jī)使用到的 Native 方法服務(wù)。
Java 堆(Java Heap)是 Java 虛擬機(jī)中內(nèi)存最大的一塊。Java 堆在虛擬機(jī)啟動時創(chuàng)建,被所有線程共享。
作用:存放對象實例。垃圾收集器主要管理的就是 Java 堆。Java 堆在物理上可以不連續(xù),只要邏輯上連續(xù)即可。
方法區(qū)(Method Area)被所有線程共享,用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。
和 Java 堆一樣,不需要連續(xù)的內(nèi)存,可以選擇固定的大小,更可以選擇不實現(xiàn)垃圾收集。
運行時常量池(Runtime Constant Pool)是方法區(qū)的一部分。保存 Class 文件中的符號引用、翻譯出來的直接引用。運行時常量池可以在運行期間將新的常量放入池中。
Object obj = new Object();