最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?重載運算符在HotSpot?VM中的應(yīng)用小結(jié)

 更新時間:2023年09月22日 11:48:29   作者:鳩摩(馬智)  
C++支持運算符重載,對于Java開發(fā)者來說,這個可能比較陌生一些,因為Java不支持運算符重載,下面介紹一下HotSpot?VM中的運算符重載,感興趣的朋友跟隨小編一起看看吧

C++支持運算符重載,對于Java開發(fā)者來說,這個可能比較陌生一些,因為Java不支持運算符重載。運算符重載本質(zhì)上來說就是函數(shù)重載。下面介紹一下HotSpot VM中的運算符重載。

1、內(nèi)存分配與釋放

在C++中可以通過new運算符創(chuàng)建一個C++的類實例,這個操作實際上上包含了如下3個步驟:

  • 調(diào)用operator new的標準庫函數(shù)。此函數(shù)會分配一塊內(nèi)存空間以便函存儲相應(yīng)類型的實例。
  • 調(diào)用相應(yīng)類的構(gòu)造函數(shù)
  • 返回一個指向該對象的指針

同樣,可以delete運算符釋放對應(yīng)的內(nèi)存,實際執(zhí)行如下2個步驟:

  • 調(diào)用相應(yīng)類的析構(gòu)函數(shù)
  • 調(diào)用operator delete標準庫函數(shù)釋放內(nèi)存。

由于C++沒有Java的GC托管技術(shù),所以分配出來的內(nèi)存時刻要惦記著釋放,這是一件非常不容易的事情。通常的做法是,內(nèi)存申請和釋放集中到一個地方管理,所以才會有Metaspace或Arena這些相對復(fù)雜一些的內(nèi)存管理機制。

有了我們自己設(shè)計的內(nèi)存管理機制后,就可以重載new運算符,讓實例從特定的內(nèi)存空間中申請和釋放內(nèi)存了,例如HotSpot VM在Klass類中重載了new運算符:

void* Klass::operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw() {
  // 在元數(shù)據(jù)區(qū)分配內(nèi)存空間
  void* x = Metaspace::allocate( 
				 loader_data,
				 word_size,
				 false,   /*read_only*/
				 MetaspaceObj::ClassType,
				 CHECK_NULL
			 );
  return x;
}

在使用new關(guān)鍵字創(chuàng)建Klass或子類的實例時,都會調(diào)用Metaspace::allocate()函數(shù)從元數(shù)據(jù)區(qū)分配內(nèi)存;在Klass類中,我們沒有看到重載delete運算符,因為刪除一個類并沒有那么簡單,需要借助GC來完成。元數(shù)據(jù)區(qū)具體管理內(nèi)存的辦法,以及分配和釋放的邏輯可參看《深入剖析Java虛擬機:源碼剖析與實例詳解》中的8.2節(jié)。
在HotSpot VM中重載new和delete運算符的地方非常多,不過oop并不是這樣做的,這應(yīng)該是考慮到它相對復(fù)雜的內(nèi)存分配邏輯和初始化過程吧。

2、句柄

關(guān)于句柄,可以參考 http://m.fzitv.net/article/141842.htm 。句柄要間接操作實例,讓GC能夠集中掃描到棧中引用到的Java對象。
句柄的相關(guān)定義如下:

class Handle {
private:
    oop *_handle; // oop的類型為oopDesc*
protected:
    oop obj() const {
        return _handle == NULL ? (oop) NULL : *_handle;
    }
    oop non_null_obj() const {
        return *_handle;
    }
public:
    // 重載了()、->和==運算符
    oop operator()() const { return obj(); }
    oop operator->() const { return non_null_obj(); }
    bool operator==(oop o) const { return obj() == o; }
    bool operator==(const Handle &h) const { return obj() == h.obj(); }
};

句柄中重載了()、->和==運算符,我們可以這樣操作:

oop obj1 = ...;
// 將對象封裝為句柄
Handle h1(obj1); 
// 獲取被封裝的對象,會調(diào)用到operator()()函數(shù),這個函數(shù)返回*_handle
oop obj2 = h1();
// 直接調(diào)用oop中定義的相關(guān)函數(shù),會調(diào)用到operator->()函數(shù),
// 在這個函數(shù)中獲取_handle值后調(diào)用_handle->print()函數(shù) 
h1->print();

這大大簡化了相關(guān)操作的簡潔性,操作句柄就感覺和操作oop是一樣的效果

到此這篇關(guān)于C++ 重載運算符在HotSpot VM中的應(yīng)用的文章就介紹到這了,更多相關(guān)C++  重載運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++ProtoBuf使用小結(jié)

    C/C++ProtoBuf使用小結(jié)

    ProtoBuf全稱:protocol buffers,直譯過來是:“協(xié)議緩沖區(qū)”,是一種與語言無關(guān)、與平臺無關(guān)的可擴展機制,用于序列化結(jié)構(gòu)化數(shù)據(jù),這篇文章主要介紹了C/C++ProtoBuf使用,需要的朋友可以參考下
    2024-01-01
  • C++11智能指針中的 unique_ptr實例詳解

    C++11智能指針中的 unique_ptr實例詳解

    unique是獨特的、唯一的意思,故名思議,unique_ptr可以“獨占”地擁有它所指向的對象,它提供一種嚴格意義上的所有權(quán)。這篇文章主要介紹了C++11智能指針中的 unique_ptr實例詳解,需要的朋友可以參考下
    2020-06-06
  • C++20新特性之ranges::sort的使用小結(jié)

    C++20新特性之ranges::sort的使用小結(jié)

    C++20引入了強大的ranges庫,為標準庫提供了更加現(xiàn)代化和方便的操作工具,本文將深入介紹ranges庫的一些重要特性,包括新的排序算法和范圍視圖,及如何使用這些特性優(yōu)雅地進行容器操作,感興趣的可以了解一下
    2025-12-12
  • C++實現(xiàn)校園運動會報名系統(tǒng)

    C++實現(xiàn)校園運動會報名系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)校園運動會報名系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    這篇文章主要介紹了C++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 深入講解Socket原理

    深入講解Socket原理

    這篇文章深入的講解Socket原理,并附帶實例代碼。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-12-12
  • c++素數(shù)篩選法

    c++素數(shù)篩選法

    本文講的是篩選法的C++實現(xiàn), 篩選法又稱篩法,是求不超過自然數(shù)N(N>1)的所有質(zhì)數(shù)的一種方法。據(jù)說是古希臘的埃拉托斯特尼(Eratosthenes,約公元前274~194年)發(fā)明的,又稱埃拉托斯特尼篩子。
    2017-05-05
  • C語言中.c和.h文件區(qū)別講解

    C語言中.c和.h文件區(qū)別講解

    這篇文章主要介紹了C語言中.c和.h文件區(qū)別講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是本文的詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++容器適配器的概念與示例

    C++容器適配器的概念與示例

    C++?STL(標準模板庫)是一套功能強大的?C++?模板類,提供了通用的模板類和函數(shù),這些模板類和函數(shù)可以實現(xiàn)多種流行和常用的算法和數(shù)據(jù)結(jié)構(gòu),如向量、鏈表、隊列、棧,今天我們來探究一下stl容器適配器的使用吧
    2023-01-01
  • C++類中三大函數(shù)詳解(構(gòu)造、析構(gòu)和拷貝)

    C++類中三大函數(shù)詳解(構(gòu)造、析構(gòu)和拷貝)

    c++三大函數(shù)指的是拷貝構(gòu)造、拷貝賦值、析構(gòu)函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++類中三大函數(shù)(構(gòu)造、析構(gòu)和拷貝)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03

最新評論

星座| 若尔盖县| 和平县| 和政县| 五大连池市| 黑河市| 广灵县| 渑池县| 文山县| 荆门市| 中阳县| 进贤县| 凤阳县| 韶关市| 虞城县| 休宁县| 金平| 奉新县| 台东县| 喀什市| 海盐县| 奈曼旗| 循化| 邯郸县| 祁连县| 甘孜县| 贵阳市| 星座| 沙雅县| 临夏市| 定州市| 从化市| 汉沽区| 西乌珠穆沁旗| 留坝县| 芜湖县| 晋江市| 日土县| 澳门| 高淳县| 龙泉市|