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