Java開發(fā)現(xiàn)在面試越來越難了,進大廠必備的JVM、多線程高并發(fā)這都是最基礎的知識了,今天我們一起來學習Java虛擬機入門。
運行時數(shù)據(jù)區(qū)域
Java虛擬機在執(zhí)行Java程序的過程中會把它所管理的內(nèi)存劃分為若干個不同的數(shù)據(jù)區(qū)域,主要有這么幾個區(qū)域,并且對每個區(qū)域進行介紹。
程序計數(shù)器
程序計數(shù)器(Program Counter Register)它是一塊較小的內(nèi)存空間,它是記錄當前線程所執(zhí)行到的字節(jié)碼的行號。因為由于Java虛擬機的多線程是通過線程輪流切換、以及分配處理器執(zhí)行時間的方式來實現(xiàn)的,一個處理器都只會執(zhí)行一條線程中的指令。為了讓線程切換后能夠恢復到正常的執(zhí)行位置,所以每一條線程都有一個獨立的程序計數(shù)器,這樣線程之間計數(shù)器互不影響。
Java虛擬機棧
和程序計數(shù)器一樣是線程私有,它的生命周期是與線程相同的。Java虛擬機是Java執(zhí)行方法的內(nèi)存模型,在每個方法執(zhí)行時都會同步創(chuàng)建一個棧幀(Stack Frame),主要是用來存儲:局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。
本地方法棧
本地方法棧就是為虛擬機使用到的本地(Native) 方法服務的。
Java堆(Heap)
Java堆是虛擬機所管理的內(nèi)存中最大的一塊,是所有線程共享的一塊區(qū)域,唯一的目的就是存放對象實例,并且是“幾乎”所有的對象的實例都是在“Java堆”分配內(nèi)存的。
同時Java堆也是垃圾收集器管理的內(nèi)存區(qū)域,也稱之為“GC堆”。由于現(xiàn)在基本采用分代回收垃圾器算法,所以Java堆又可以分為:新生代、老年代。
法區(qū)
方法區(qū)也是線程共享的內(nèi)存區(qū)域,主要存儲已被虛擬機加載的類型信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼緩存等數(shù)據(jù)。
很多Java程序員都習慣在 HotSpot虛擬機上開發(fā)、部署程序,很多人都更愿意把方法區(qū)稱呼為“永久代“。到了 JDK 8,終于完全廢棄了永久代的概念,改用與JRockit、J9一樣在本地內(nèi)存中實現(xiàn)的元空間(Metaspace)來代替了。注意:這區(qū)域的內(nèi)存回收目標主要是針對常量池的回收和對類型的卸載。
補充
運行時常量池:它是方法區(qū)的一部分,用于存放編譯期生成的各種字面量與符號引用,這部分內(nèi)容將在類加載后存放到方法區(qū)的運行時常量池中。對于初學者想深入JVM虛擬機原理,國內(nèi)非常不錯的深入理解Java虛擬機第三版這本,值得Java程序員看的。
-
JAVA
+關注
關注
19文章
2976瀏覽量
105215 -
JVM
+關注
關注
0文章
158瀏覽量
12270 -
虛擬機
+關注
關注
1文章
949瀏覽量
28470
發(fā)布評論請先 登錄
相關推薦
hyper 備份,Hyper備份:虛擬機備份與恢復
![hyper 備份,Hyper備份:<b class='flag-5'>虛擬機</b>備份與恢復](https://file1.elecfans.com/web3/M00/06/FB/wKgZO2eRojaAedKRAAJ1cEnLmOg140.png)
RK3588 SDK入門之虛擬機配置篇
![RK3588 SDK<b class='flag-5'>入門</b>之<b class='flag-5'>虛擬機</b>配置篇](https://file.elecfans.com/web2/M00/5D/1D/poYBAGLzEqqAd54TAAAbaJrrfwc915.png)
虛擬化數(shù)據(jù)恢復—XenServer虛擬機數(shù)據(jù)恢復案例
![<b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復—XenServer<b class='flag-5'>虛擬機</b>數(shù)據(jù)恢復案例](https://file1.elecfans.com/web1/M00/F4/8B/wKgZoWctd42AfXpjAAbtwDYtgLM057.png)
虛擬化數(shù)據(jù)恢復——Hyper-V虛擬機數(shù)據(jù)恢復案例
![<b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復——Hyper-V<b class='flag-5'>虛擬機</b>數(shù)據(jù)恢復案例](https://file1.elecfans.com/web2/M00/8F/DD/wKgZomTTN6qAWIF8AAM51-OjElE231.png)
虛擬機數(shù)據(jù)恢復—異常斷電導致XenServer虛擬機不可用的數(shù)據(jù)恢復案例
![<b class='flag-5'>虛擬機</b>數(shù)據(jù)恢復—異常斷電導致XenServer<b class='flag-5'>虛擬機</b>不可用的數(shù)據(jù)恢復案例](https://file1.elecfans.com/web2/M00/8F/99/wKgaomTQm3qAf9x-AATepdcm3zE240.png)
虛擬化數(shù)據(jù)恢復—EXSI虛擬機誤還原快照如何恢復數(shù)據(jù)?
![<b class='flag-5'>虛擬</b>化數(shù)據(jù)恢復—EXSI<b class='flag-5'>虛擬機</b>誤還原快照如何恢復數(shù)據(jù)?](https://file1.elecfans.com/web2/M00/E1/58/wKgaomY4adOAeUAFAAHkmHUEi4s929.png)
什么是虛擬機?什么是虛擬化?
從原理聊JVM(一):染色標記和垃圾回收算法
![從原理聊<b class='flag-5'>JVM</b>(一):染色標記和垃圾回收算法](https://file1.elecfans.com//web2/M00/04/71/wKgaombERMKAIkVjAAHROjCUdGM843.png)
創(chuàng)建ubuntu虛擬機
虛擬機數(shù)據(jù)恢復—KVM虛擬機被誤刪除的數(shù)據(jù)恢復案例
![<b class='flag-5'>虛擬機</b>數(shù)據(jù)恢復—KVM<b class='flag-5'>虛擬機</b>被誤刪除的數(shù)據(jù)恢復案例](https://file.elecfans.com/web2/M00/AD/F3/poYBAGSadTWACtx5AANUKGY87Ws406.png)
什么是虛擬機?虛擬機真的那么好用嗎?
![什么是<b class='flag-5'>虛擬機</b>?<b class='flag-5'>虛擬機</b>真的那么好用嗎?](https://file.elecfans.com/web2/M00/43/7B/pYYBAGJ-B6aAHuNPAAAf8J1Ebk4778.jpg)
虛擬化數(shù)據(jù)恢復—虛擬機誤還原快照的數(shù)據(jù)恢復案例
虛擬機的ip地址和主機一樣嗎
虛擬機數(shù)據(jù)恢復-虛擬機還原快照原理和誤還原快照的數(shù)據(jù)恢復方案
![<b class='flag-5'>虛擬機</b>數(shù)據(jù)恢復-<b class='flag-5'>虛擬機</b>還原快照原理和誤還原快照的數(shù)據(jù)恢復方案](https://file1.elecfans.com/web2/M00/C2/34/wKgaomXdXNOAB5RGAAF79aoW9Ew715.png)
評論