Java開發現在面試越來越難了,進大廠必備的JVM、多線程高并發這都是最基礎的知識了,今天我們一起來學習Java虛擬機入門。
運行時數據區域
Java虛擬機在執行Java程序的過程中會把它所管理的內存劃分為若干個不同的數據區域,主要有這么幾個區域,并且對每個區域進行介紹。
程序計數器
程序計數器(Program Counter Register)它是一塊較小的內存空間,它是記錄當前線程所執行到的字節碼的行號。因為由于Java虛擬機的多線程是通過線程輪流切換、以及分配處理器執行時間的方式來實現的,一個處理器都只會執行一條線程中的指令。為了讓線程切換后能夠恢復到正常的執行位置,所以每一條線程都有一個獨立的程序計數器,這樣線程之間計數器互不影響。
Java虛擬機棧
和程序計數器一樣是線程私有,它的生命周期是與線程相同的。Java虛擬機是Java執行方法的內存模型,在每個方法執行時都會同步創建一個棧幀(Stack Frame),主要是用來存儲:局部變量表、操作數棧、動態鏈接、方法出口等信息。
本地方法棧
本地方法棧就是為虛擬機使用到的本地(Native) 方法服務的。
Java堆(Heap)
Java堆是虛擬機所管理的內存中最大的一塊,是所有線程共享的一塊區域,唯一的目的就是存放對象實例,并且是“幾乎”所有的對象的實例都是在“Java堆”分配內存的。
同時Java堆也是垃圾收集器管理的內存區域,也稱之為“GC堆”。由于現在基本采用分代回收垃圾器算法,所以Java堆又可以分為:新生代、老年代。
法區
方法區也是線程共享的內存區域,主要存儲已被虛擬機加載的類型信息、常量、靜態變量、即時編譯器編譯后的代碼緩存等數據。
很多Java程序員都習慣在 HotSpot虛擬機上開發、部署程序,很多人都更愿意把方法區稱呼為“永久代“。到了 JDK 8,終于完全廢棄了永久代的概念,改用與JRockit、J9一樣在本地內存中實現的元空間(Metaspace)來代替了。注意:這區域的內存回收目標主要是針對常量池的回收和對類型的卸載。
補充
運行時常量池:它是方法區的一部分,用于存放編譯期生成的各種字面量與符號引用,這部分內容將在類加載后存放到方法區的運行時常量池中。對于初學者想深入JVM虛擬機原理,國內非常不錯的深入理解Java虛擬機第三版這本,值得Java程序員看的。
-
JAVA
+關注
關注
20文章
2989瀏覽量
109620 -
JVM
+關注
關注
0文章
160瀏覽量
12620 -
虛擬機
+關注
關注
1文章
966瀏覽量
29356
發布評論請先 登錄
TECS OpenStack資源池虛擬機網絡二層地址無法互通的問題處理

hyper 備份,Hyper備份:虛擬機備份與恢復

hyper內存條,hyper-v 添加虛擬機還需要硬盤嗎

RK3588 SDK入門之虛擬機配置篇

虛擬化數據恢復—誤還原Vmware虛擬機快照的數據恢復案例
虛擬化數據恢復——Hyper-V虛擬機數據恢復案例

虛擬機數據恢復—異常斷電導致XenServer虛擬機不可用的數據恢復案例

什么是虛擬機?什么是虛擬化?
從原理聊JVM(一):染色標記和垃圾回收算法

創建ubuntu虛擬機
虛擬機數據恢復—KVM虛擬機被誤刪除的數據恢復案例

聊聊JVM如何優化

評論