探究Jvm源码实现
當我們在Java代碼中,使用new創建一個對象實例的時候,(hotspot虛擬機)JVM層面實際上會創建一個?instanceOopDesc對象。
Hotspot虛擬機采用OOP-Klass模型來描述Java對象實例,OOP(Ordinary Object Point)指的是普通對象指針,Klass用來描述對象實例的具體類型。Hotspot采用instanceOopDesc和arrayOopDesc來描述對象頭,arrayOopDesc對象用來描述數組類型
instanceOopDesc的定義在Hotspot源碼中的?instanceOop.hpp文件中,另外,arrayOopDesc的定義對應?arrayOop.hpp
從instanceOopDesc代碼中可以看到?instanceOopDesc繼承自oopDesc,oopDesc的定義載Hotspot源碼中的?oop.hpp文件中?
在普通實例對象中,oopDesc的定義包含兩個成員,分別是?_mark和?_metadata
_mark表示對象標記、屬于markOop類型,也就是接下來要講解的Mark World,它記錄了對象和鎖有關的信息
_metadata表示類元信息,類元信息存儲的是對象指向它的類元數據(Klass)的首地址,其中Klass表示普通指針、?_compressed_klass表示壓縮類指針
?
總結
- 上一篇: 对象在内存中的布局
- 下一篇: 探究Jvm源码实现-MarkWord