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