Java 虛擬機器基本結構介紹
java虛擬機器的基本結構如圖所示:
基本的結構有8個
類載入子系統: 主要負責負責載入Class資訊,載入的類資訊都存放在方法區的類存空間中。 當JVM使用類載入器裝載某個類時,它首先要定位對應的class檔案,然後讀入這個class檔案,最後,JVM提取該檔案的內容資訊,並將這些資訊儲存到方法區,最後返回一個class例項
方法區:方法區主要儲存的是方法,靜態成員,常量。方法區中給每個類都規定了空間並且持有this和super的引用。當執行到哪個物件的時候,通過this動態指向該物件,引用該物件的成員變數,然後和方法以及區域性變數一起在棧中進行運算。
方法區的大小不必是固定的,預設最小值為16MB,最大值為64MB,JVM可根據應用需要動態調整。同時,方法區也不一定是連續的,方法區可以在一個堆(甚至是JVM自己的堆)中自由分配。
java堆: java堆實在jvm啟動的時候就建立的,這塊記憶體區域 存放了物件例項及陣列(所有new的物件)也就是 Object object = new Object(); 這裡object只是一個引用是放在棧裡面的,new Object() 被放在了 堆記憶體裡面,
由於現在收集器都是採用分代收集演算法,堆被劃分為新生代和老年代。新生代主要儲存新建立的物件和尚未進入老年代的物件。老年代儲存經過多次新生代GC(Minor GC)任然存活的物件。
垃圾回收系統:垃圾回收系統是jvm的重要組成部分,垃圾回收器 可以直接對 方法區 ,java堆和直接記憶體進行回收,在其中 java堆則是垃圾回收器的 重點工作區域,對於不在使用的垃圾物件,垃圾回收系統會在後臺,查詢 標識,並且釋放這些不用的垃圾物件
java 棧:每一個執行緒中都有私有的java棧,一個執行緒的java棧 線上程被建立的時候就會被建立,java棧中儲存著,區域性變數,方法引數,並且物件的引用也存在棧中
本地方法棧:本地方法棧用於本地方法呼叫
Pc暫存器:暫存器是每個執行緒所有私有的空間,每個執行緒都會有暫存器,當執行緒在執行方法是,而這個方法不是本地方法,暫存器就指向當前被執行的指令
執行引擎:執行引擎則是jvm最核心的元件之一,他負責執行位元組碼