在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳細(xì)介紹synchronized和Object的關(guān)鍵方法和虛擬機(jī)實(shí)現(xiàn)原理

Linux閱碼場(chǎng) ? 來(lái)源:內(nèi)核工匠 ? 2023-03-13 10:06 ? 次閱讀

一、前言

編程過(guò)程中經(jīng)常會(huì)遇到線程的同步問(wèn)題,Java 中對(duì)同步問(wèn)題的解決方案比較多(synchronized、JUC、原子操作、volatile、條件變量等),其中synchronized 最方便、簡(jiǎn)單易用,也是java 編程中使用最多的臨界區(qū)保護(hù)方案。本文主要講述對(duì)象鎖的相關(guān)知識(shí),詳細(xì)介紹synchronized 和Object 的關(guān)鍵方法的虛擬機(jī)實(shí)現(xiàn)原理。

二、Java 對(duì)象鎖的使用方式

2.1 實(shí)例方法的同步

0125b334-bfd4-11ed-bfe3-dac502259ad0.png

synchronized 修飾實(shí)例方法,該同步僅對(duì)當(dāng)前對(duì)象的該方法起作用,同一時(shí)間只能有一個(gè)線程可以進(jìn)入該對(duì)象的此方法。對(duì)于不同對(duì)象的此函數(shù),無(wú)法做到互斥保護(hù)。

2.2 靜態(tài)方法的同步

012e647a-bfd4-11ed-bfe3-dac502259ad0.png

synchronized 修飾靜態(tài)方法,該同步對(duì)當(dāng)前類對(duì)象的該方法起作用,同一時(shí)間只能有一個(gè)線程可以進(jìn)入該方法。

2.3 代碼塊的同步

01357d14-bfd4-11ed-bfe3-dac502259ad0.png

在大多少情況下,并不需要對(duì)整個(gè)方法進(jìn)行保護(hù),當(dāng)synchronized 修飾代碼塊時(shí),該代碼塊的訪問(wèn)依賴于object 對(duì)象鎖的互斥訪問(wèn),同一時(shí)間只能有一個(gè)線程持有object 對(duì)象鎖。

更準(zhǔn)確的來(lái)講,synchronized 關(guān)鍵字是依賴于對(duì)象鎖而生效的,每個(gè)synchronized 同步塊開(kāi)始的地方都會(huì)生成monitor-enter obj指令,同步塊結(jié)束的地方生成monitor-exit obj 的指令,其中obj 為用于控制互斥訪問(wèn)的對(duì)象。同一時(shí)間只能有一個(gè)線程持有obj 的對(duì)象鎖。在2.1 中synchronized 依賴的是實(shí)列對(duì)象,2.2 中synchronized 依賴的是類對(duì)象,2.3 中synchronized 依賴的是object 對(duì)象。

當(dāng)一個(gè)對(duì)象控制多個(gè)代碼塊時(shí),多個(gè)代碼塊也是互斥訪問(wèn),如下面代碼:

013f31a6-bfd4-11ed-bfe3-dac502259ad0.png

代碼塊①和代碼塊② 雖然在兩個(gè)函數(shù)中,但是synchronized 依賴的對(duì)象都為object,這兩個(gè)代碼塊也是互斥訪問(wèn)。

2.4 Object wait() 和notify() 使用方法

Object 作為所有類的基類,都實(shí)現(xiàn)了object方法。典型的用法如下:

014808ee-bfd4-11ed-bfe3-dac502259ad0.png

thread 1持有object 對(duì)象鎖,并調(diào)用object.wait() 方法后,則該線程進(jìn)入WAITING狀態(tài),并釋放object 對(duì)象鎖,等待其它線程來(lái)喚醒它。

當(dāng)thread 2 持有object 對(duì)象鎖,并調(diào)用object.notify()方法后,喚醒thread 1,thread 1

重新獲得object 對(duì)象鎖繼續(xù)執(zhí)行。Object類方法說(shuō)明:

0153dcbe-bfd4-11ed-bfe3-dac502259ad0.png

三、Android對(duì)象內(nèi)存結(jié)構(gòu)

3.1 對(duì)象內(nèi)存結(jié)構(gòu)

015b436e-bfd4-11ed-bfe3-dac502259ad0.png

一個(gè)類的實(shí)例對(duì)象內(nèi)存主要由3部分組成:

1). 對(duì)象頭:對(duì)象頭包括kclass_和monitor_兩個(gè)字段,其中kclass_ 存放指向類對(duì)象的指針,通過(guò)該指針可以找到該對(duì)象對(duì)應(yīng)的類,monitor_ 用于存放對(duì)象運(yùn)行時(shí)的標(biāo)識(shí)數(shù)據(jù),例如: GC 標(biāo)志位、哈希碼、鎖狀態(tài)等信息,后面詳細(xì)分析。

2). 實(shí)例數(shù)據(jù),該部分存放實(shí)例變量值,父類實(shí)例變量值在前,子類在后,且實(shí)例變量值按照如下順序進(jìn)行排序:

01641c32-bfd4-11ed-bfe3-dac502259ad0.png

3).對(duì)齊填充,對(duì)象在內(nèi)存中是按照8byte 對(duì)齊的,如果實(shí)例數(shù)據(jù)部分沒(méi)有按照8byte對(duì)齊,則填充為8byte 對(duì)齊。

3.2 monitor_ 字段分析

monitor_ 字段定義在art/runtime/mirror/object.h,類型為uint32_t,主要有下面3個(gè)操作函數(shù)。

01709f48-bfd4-11ed-bfe3-dac502259ad0.png

操作函數(shù)中SetLockWord和CasLockWord函數(shù)的入?yún)⒒騁etLockWord函數(shù)的返回值都包含LockWord 變量,對(duì)monitor_ 字段的操作是通過(guò)LockWord 的值進(jìn)行的。

下面再來(lái)看LockWord 定義:

LockWord 類的定義在art/runtime/lock_word.h 文件中,從注釋中可以看到LockWord的使用主要有4種狀態(tài),如下:

017afa24-bfd4-11ed-bfe3-dac502259ad0.png

LockWord 的設(shè)計(jì)非常精妙,一個(gè)32 位數(shù)據(jù)的每一位都充分利用,而且很好的區(qū)分了不同狀態(tài)。下面對(duì)各狀態(tài)進(jìn)行詳細(xì)說(shuō)明:

unlocked/thin 狀態(tài)下31-30 bit 為00,默認(rèn)狀態(tài)下為unlocked 狀態(tài),當(dāng)對(duì)象進(jìn)行線程同步時(shí)變成thin lock 狀態(tài),27-16bit 記錄了thin lock重入的次數(shù),15-0 bit 記錄了持有該thin lock的線程ID。

fat lock狀態(tài)下31-30 bit 為01,當(dāng)對(duì)象鎖在thin lock狀態(tài),且有新的(非owner)線程與其競(jìng)爭(zhēng),經(jīng)過(guò)適當(dāng)?shù)牡却冢╯ched_yield調(diào)用、循環(huán)獲取thin lock 狀態(tài))后依然無(wú)法拿到鎖,則轉(zhuǎn)換為fat lock 狀態(tài),并為該對(duì)象分配一個(gè)Monitor 資源。

hash state狀態(tài)下31-30 bit 為10,在27-0 bit 存儲(chǔ)對(duì)象的hash code,當(dāng)在其它模式下,hash code 會(huì)存儲(chǔ)在該對(duì)象關(guān)聯(lián)的Monitor 對(duì)象中。

forwarding address state 狀態(tài)下31-30 bit 為11,在concurrent copying GC 的copy 階段,當(dāng)一個(gè)對(duì)象被拷貝后,指向拷貝后的對(duì)象地址,當(dāng)線程訪問(wèn)到該對(duì)象后,通過(guò)該轉(zhuǎn)發(fā)地址,訪問(wèn)新的對(duì)象。

第29 位為mark bit,通過(guò)該bit位可以快速判斷是否標(biāo)記過(guò),避免重復(fù)標(biāo)記。

第28 位為read barrier bit,如果對(duì)象LockWorkd的該bit 被設(shè)置,則在訪問(wèn)該對(duì)象的成員時(shí)會(huì)進(jìn)入慢速路徑,判斷對(duì)象是不是需要更新,如果需要更新,則返回拷貝后的對(duì)象地址。

四、對(duì)象鎖代碼分析

4.1 首先我們看一段代碼

0183f016-bfd4-11ed-bfe3-dac502259ad0.png

這段代碼比較簡(jiǎn)單,主要有下面兩個(gè)核心點(diǎn):

1). 在主線程執(zhí)行的過(guò)程中,用obj 對(duì)象進(jìn)行線程同步,并調(diào)用obj.wait()函數(shù),使線程阻塞在了obj 對(duì)象鎖上等待喚醒。

2). main函數(shù)中創(chuàng)建匿名線程,該線程首先sleep 2000ms,然后喚醒阻塞在obj 對(duì)象鎖上線程。

4.2編譯TestDemo.java,命令如下:

01934f52-bfd4-11ed-bfe3-dac502259ad0.png

1).Javac 將TestDemo.java 文件編譯生成TestDemo*.class文件,java 編譯過(guò)程中每個(gè)類會(huì)生成一個(gè)class 文件。

2).d8 命令將TestDemo*.class 文件通過(guò)編譯、重構(gòu)、重排、壓縮、混淆后生成對(duì)應(yīng)的dex (Dalvik Executable file)格式文件。

3).dexdump.exe命令可以查看dex 文件格式的詳細(xì)信息,如校驗(yàn)信息、dex 頭信息、生成dex 的CFG 信息、dex 的反匯編信息等,詳細(xì)使用方法可以通過(guò)dexdump.exe –help 命令查看

通過(guò)dexdump.exe –d classes.dex 查看反匯編

其中run 方法指令信息如下:

019aa806-bfd4-11ed-bfe3-dac502259ad0.png

main 函數(shù)的指令信息如下:

01a6f476-bfd4-11ed-bfe3-dac502259ad0.png

對(duì)部分指令解析如下:

01b3ab30-bfd4-11ed-bfe3-dac502259ad0.png

本文重點(diǎn)分析monitor-enter、monitor-exit、Object.wait()、Object.notify()在虛擬機(jī)中的詳細(xì)實(shí)現(xiàn)。

4.3.Object.wait() 流程分析

Object.wait() 的調(diào)用關(guān)系如下:

01b9e626-bfd4-11ed-bfe3-dac502259ad0.png

Object 類是所有類的父類,任何類中都可以調(diào)用public 的wait() 方法,最終調(diào)用到虛擬機(jī)的monitor.cc 文件的wait 靜態(tài)方法,

01c49472-bfd4-11ed-bfe3-dac502259ad0.png

首先構(gòu)造了一個(gè)操作obj 的Handle對(duì)象h_obj,通過(guò)ObjectWaitStart 函數(shù)通知jvmti 調(diào)試系統(tǒng)發(fā)生了JVMTI_EVENT_MONITOR_WAIT 事件。

JVMTI(JVM Tool Interface)是 Java 虛擬機(jī)所提供的 native 編程接口,可以用來(lái)開(kāi)發(fā)并監(jiān)控虛擬機(jī),可以查看JVM內(nèi)部的狀態(tài),并控制JVM應(yīng)用程序的執(zhí)行。可實(shí)現(xiàn)的功能包括但不限于:調(diào)試、監(jiān)控、線程分析、覆蓋率分析工具等。

01cf4ca0-bfd4-11ed-bfe3-dac502259ad0.png

首先獲得h_obj 對(duì)象的LockWord 字段,lock_word.GetState()函數(shù)獲得當(dāng)前的鎖狀態(tài),主要有下面幾種情況:

1).hash 或unlocked 狀態(tài):

因?yàn)檎{(diào)用wait()方法必須持有對(duì)象鎖,所以不會(huì)出現(xiàn)這兩種狀態(tài),如果出現(xiàn)則拋出IllegalMonitorStateException 異常。

2).thin lock 狀態(tài):

當(dāng)持有該對(duì)象鎖的線程不是要wait 的線程,也拋出IllegalMonitorStateException 異常,當(dāng)持有鎖的線程與要wait 的線程一致,這時(shí)需要將thin lock inflate 為fat lock,inflate 的過(guò)程在monitor-enter 指令分析中分析。

當(dāng)對(duì)象鎖inflate 為fat lock 狀態(tài)后,調(diào)用Monitor 對(duì)象的實(shí)例方法Wait讓線程進(jìn)入sleep 狀態(tài)等待。

4.4 Object.notify() 流程分析

01d96622-bfd4-11ed-bfe3-dac502259ad0.png

這里我們直接分析DoNotify 函數(shù):

01e4f622-bfd4-11ed-bfe3-dac502259ad0.png

通過(guò)lock_word.GetState() 獲得當(dāng)前obj 對(duì)象的鎖狀態(tài),主要有下面情況:

1) hash 或unlocked 狀態(tài) :

拋出IllegalMonitorStateException 異常。

2).thin lock 狀態(tài):

當(dāng)持有該對(duì)象鎖的線程不是要notify 的線程,也拋出IllegalMonitorStateException 異常,當(dāng)持有鎖的線程與要notify 的線程一致,這時(shí)說(shuō)明沒(méi)有需要通知喚醒的線程,直接返回。

3).fat lock 狀態(tài):

在Object.notify() 流程中參數(shù)notify_all 為false,則直接調(diào)用mon->Notify(self);通知喚醒等待線程。

4.5monitor-enter 流程分析

對(duì)于解釋執(zhí)行和機(jī)器碼執(zhí)行模式,最終都會(huì)調(diào)用到art/runtime/mirror/object-inl.h 文件Object 對(duì)象的MonitorEnter 函數(shù)。

01ef32cc-bfd4-11ed-bfe3-dac502259ad0.png

下面來(lái)分析Monitor類的靜態(tài)方法MonitorEnter 函數(shù)。

01f5be08-bfd4-11ed-bfe3-dac502259ad0.png

FakeLock 主要用于線程安全性檢查,主要在編譯期檢測(cè)。

kExtraSpinIters 定義了當(dāng)對(duì)象鎖被其它線程持有且為thin lock 時(shí),競(jìng)爭(zhēng)線程循環(huán)獲取鎖的次數(shù)。

02050084-bfd4-11ed-bfe3-dac502259ad0.png

通過(guò)lock_word.GetState() 獲取鎖狀態(tài),當(dāng)鎖狀態(tài)為unlocked 狀態(tài)時(shí),轉(zhuǎn)換為thin lock 狀態(tài),并通過(guò)cas 操作更新lock count。

021aee8a-bfd4-11ed-bfe3-dac502259ad0.png

當(dāng)鎖狀態(tài)為thin lock 狀態(tài)時(shí),首先獲取鎖的owner 線程id,如果owner id 與競(jìng)爭(zhēng)線程id 一致,則有下面兩種情況:

如果lock count加1小于等于(1<<12)-1(4095)時(shí),將lock count+1 更新lock count。

如果lock count加1大于(1<<12)-1時(shí)(lock count 區(qū)域無(wú)法存儲(chǔ)),則調(diào)用InflateThinLocked 函數(shù)對(duì)thin lock 進(jìn)行膨脹。

Atrace* 相關(guān)的函數(shù)主要用于systrace 相關(guān)信息的打印,trylock 在這里為false。

02331514-bfd4-11ed-bfe3-dac502259ad0.png

當(dāng)鎖狀態(tài)為thin lock 狀態(tài)且鎖的owner 線程id 與競(jìng)爭(zhēng)線程id 不一致,則做一定的等待。

runtime->GetMaxSpinsBeforeThinLockInflation() 的值為50 ,也就是說(shuō)執(zhí)行100 次的循環(huán)判斷鎖狀態(tài)后,再執(zhí)行50次的sched_yield() 后還未獲得鎖資源,如果還未拿到鎖,則對(duì)該鎖進(jìn)行膨脹。sched_yield() 會(huì)主動(dòng)讓出當(dāng)前線程的執(zhí)行權(quán)限,并在某個(gè)時(shí)間后恢復(fù)執(zhí)行。

023da290-bfd4-11ed-bfe3-dac502259ad0.png

當(dāng)鎖狀態(tài)已經(jīng)是fat lock 狀態(tài),通過(guò)lock_word.FatLockMonitor(); 獲取Monitor 對(duì)象,并通過(guò)Monitor 對(duì)象的Lock 函數(shù)讓線程進(jìn)入等待狀態(tài)。

024dff50-bfd4-11ed-bfe3-dac502259ad0.png

當(dāng)鎖狀態(tài)已經(jīng)是hash 狀態(tài)時(shí),直接對(duì)鎖進(jìn)行膨脹。

下面看鎖膨脹的過(guò)程:

0256bbfe-bfd4-11ed-bfe3-dac502259ad0.png

thin lock 的膨脹有兩種情形:

1).lock count 的值超過(guò)了4095,這時(shí)鎖的owner 為當(dāng)前線程,即直接通過(guò)Inflate 函數(shù)膨脹

2).鎖的owner不是當(dāng)前線程,通過(guò)SuspendThreadByThreadId 暫停鎖的owner 線程(主要是owner 線程和鎖膨脹線程都需要訪問(wèn)對(duì)象的LockWord,避免競(jìng)態(tài)問(wèn)題),然后通過(guò)Inflate 進(jìn)行膨脹。膨脹完成后再喚醒鎖的owner 線程。

再看Inflate 的過(guò)程:

026aeeb2-bfd4-11ed-bfe3-dac502259ad0.png

通過(guò)MonitorPool::CreateMonitor函數(shù)獲取一個(gè)Monitor 的對(duì)象m,并通過(guò)m->install(self)函數(shù)更新對(duì)象的LockWord字段,這時(shí)LockWord 字段信息包含fat lock 狀態(tài)、GC 狀態(tài)、MonitorId,然后將m 保存在monitor_list_ 中。

monitor_list_中存儲(chǔ)了當(dāng)前虛擬機(jī)使用的所有Monitor 對(duì)象。在GC 的過(guò)程中,通過(guò)該鏈表,訪問(wèn)到Monitor 依賴的對(duì)象。如果對(duì)象變成垃圾對(duì)象,則回收該Monitor,否則更新Monitor 依賴的對(duì)象信息。

MonitorId 用于唯一標(biāo)識(shí)一個(gè)Monitor,生成的方法可以看monitor_pool.h 中的實(shí)現(xiàn)。

再看Monitor::Lock的過(guò)程:

該函數(shù)的實(shí)現(xiàn)較長(zhǎng),省去調(diào)試相關(guān)的代碼。

027fa974-bfd4-11ed-bfe3-dac502259ad0.png

首先介紹Monitor 中最重要的成員monitor_lock_ ,它是Mutex 的實(shí)例,通過(guò)該實(shí)例實(shí)現(xiàn)鎖相關(guān)的核心邏輯。

TryLock 函數(shù)主要是通過(guò)Mutex的函數(shù)實(shí)現(xiàn)一定的自旋等待,并設(shè)置鎖的狀態(tài)為線程持有的狀態(tài)。

monitor_lock_.ExclusiveLock(self);在Mutex 的ExclusiveLock函數(shù)中通過(guò)futex 系統(tǒng)調(diào)用實(shí)現(xiàn)了線程的阻塞,futex調(diào)用代碼如下。

028f8dbc-bfd4-11ed-bfe3-dac502259ad0.png

4.6 monitor-exit 流程分析

解釋執(zhí)行和機(jī)器碼執(zhí)行模式都會(huì)調(diào)用到MonitorExit 函數(shù)。

029801e0-bfd4-11ed-bfe3-dac502259ad0.png

通過(guò)lock_word.GetState()獲取LockWord 狀態(tài),當(dāng)狀態(tài)為hash 或unlocked 狀態(tài)時(shí),通過(guò)FailedUnlock函數(shù)拋出異常。

02a795c4-bfd4-11ed-bfe3-dac502259ad0.png

當(dāng)LockWord 的狀態(tài)為thin lock 狀態(tài)時(shí),有下面兩種情況:

1).鎖的owner 與當(dāng)前線程不一致,則出錯(cuò)拋出異常。

2).鎖的owner 與當(dāng)前線程為同一線程,當(dāng)鎖有重入時(shí),則將lock count -1,否則設(shè)置為unlocked 狀態(tài)。

02b45c82-bfd4-11ed-bfe3-dac502259ad0.png

當(dāng)LockWord 的狀態(tài)為fat lock狀態(tài)時(shí),獲取該對(duì)象關(guān)聯(lián)的Monitor 對(duì)象,并調(diào)用Unlock 函數(shù)

02c02dd2-bfd4-11ed-bfe3-dac502259ad0.png

在Unlock 函數(shù)中l(wèi)ock_count 為0,說(shuō)明該線程不在持有該鎖,通過(guò)SignalWaiterAndReleaseMonitorLock 喚醒阻塞在該鎖上的線程。

五、總結(jié)

本文簡(jiǎn)單的闡述了對(duì)象鎖的使用方式,對(duì)象在內(nèi)存中的結(jié)構(gòu),并對(duì)對(duì)象頭中關(guān)鍵成員LockWord 進(jìn)行了分析,最后介紹了synchronized、Object.wait()和Object.notify()在虛擬機(jī)中的實(shí)現(xiàn)流程。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3959

    瀏覽量

    129290
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106589
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    159

    瀏覽量

    12480
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    956

    瀏覽量

    28906

原文標(biāo)題:虛擬機(jī)中對(duì)象鎖實(shí)現(xiàn)分析

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    介紹VirtualBox虛擬機(jī)的構(gòu)建方法

    本系列文章將向大家介紹嵌入式系統(tǒng)開(kāi)發(fā)的各方面知識(shí)。本文將向大家介紹VirtualBox虛擬機(jī)的構(gòu)建方法。一、什么是虛擬機(jī)二、主流
    發(fā)表于 11-08 06:21

    VM虛擬機(jī)詳細(xì)使用安裝教程

    VM虛擬機(jī)詳細(xì)使用安裝教程
    發(fā)表于 07-30 16:16 ?0次下載

    基于虛擬機(jī)技術(shù)的DSC仿真系統(tǒng)設(shè)計(jì)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法虛擬機(jī)技術(shù)的其他
    發(fā)表于 12-03 17:26 ?27次下載
    基于<b class='flag-5'>虛擬機(jī)</b>技術(shù)的DSC仿真系統(tǒng)設(shè)計(jì)

    基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法虛擬機(jī)技術(shù)的其他
    發(fā)表于 01-16 15:04 ?2345次閱讀
    基于<b class='flag-5'>虛擬機(jī)</b>技術(shù)的DCS仿真系統(tǒng)設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    虛擬機(jī)鏡像去冗余方法

    挑戰(zhàn)性的研究熱點(diǎn).由于虛擬機(jī)鏡像之間存在大量重復(fù)性的數(shù)據(jù)塊,高效的去冗余方法對(duì)于虛擬機(jī)鏡像管理至關(guān)重要.然而,傳統(tǒng)的去冗余方法由于需要巨大的資源開(kāi)銷,會(huì)對(duì)平臺(tái)中托管的
    發(fā)表于 01-17 09:50 ?0次下載

    基于硬件虛擬化的虛擬機(jī)進(jìn)程代碼分頁(yè)式度量方法

    云環(huán)境下惡意軟件可利用多種手段篡改虛擬機(jī)( VM)中關(guān)鍵業(yè)務(wù)代碼,威脅其運(yùn)行的穩(wěn)定性。傳統(tǒng)的基于主機(jī)的度量系統(tǒng)易被繞過(guò)或攻擊而失效,針對(duì)在虛擬機(jī)監(jiān)視器( VMM)層難以獲取虛擬機(jī)中運(yùn)行
    發(fā)表于 03-29 17:40 ?0次下載
    基于硬件<b class='flag-5'>虛擬</b>化的<b class='flag-5'>虛擬機(jī)</b>進(jìn)程代碼分頁(yè)式度量<b class='flag-5'>方法</b>

    如何在Win下安裝linux的虛擬機(jī)詳細(xì)安裝方法資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在Win7下安裝linux的虛擬機(jī)詳細(xì)安裝方法資料概述免費(fèi)下載。
    發(fā)表于 11-28 15:03 ?3次下載

    什么是區(qū)塊鏈虛擬機(jī)和普通虛擬機(jī)有啥區(qū)別

    區(qū)塊鏈技術(shù)領(lǐng)域基礎(chǔ)設(shè)施——虛擬機(jī),是實(shí)現(xiàn)智能合約系統(tǒng)最為關(guān)鍵和核心的技術(shù)。智能合約不僅是業(yè)務(wù)邏輯的載體,同時(shí)又扎扎實(shí)實(shí)地落在了技術(shù)實(shí)現(xiàn)的層面。由此可見(jiàn),
    發(fā)表于 03-04 10:50 ?5157次閱讀

    linux虛擬機(jī)的聯(lián)網(wǎng)方法

    虛擬機(jī)安裝linux系統(tǒng)無(wú)法上網(wǎng)的解決方法
    發(fā)表于 05-31 09:27 ?1601次閱讀
    linux<b class='flag-5'>虛擬機(jī)</b>的聯(lián)網(wǎng)<b class='flag-5'>方法</b>

    虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn):C\C++

    虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn):C\C++
    發(fā)表于 02-21 15:10 ?0次下載

    虛擬機(jī)洞察:實(shí)現(xiàn)應(yīng)用感知型基礎(chǔ)架構(gòu)的關(guān)鍵路徑

    電子發(fā)燒友網(wǎng)站提供《虛擬機(jī)洞察:實(shí)現(xiàn)應(yīng)用感知型基礎(chǔ)架構(gòu)的關(guān)鍵路徑.pdf》資料免費(fèi)下載
    發(fā)表于 08-29 11:07 ?0次下載
    <b class='flag-5'>虛擬機(jī)</b>洞察:<b class='flag-5'>實(shí)現(xiàn)</b>應(yīng)用感知型基礎(chǔ)架構(gòu)的<b class='flag-5'>關(guān)鍵</b>路徑

    linux虛擬機(jī)怎么運(yùn)行代碼

    運(yùn)行代碼是Linux虛擬機(jī)中的常見(jiàn)操作,本文將詳細(xì)介紹如何運(yùn)行代碼。 首先,要運(yùn)行代碼,你需要先安裝好Linux虛擬機(jī),并確保能夠順利運(yùn)行。接下來(lái),你需要打開(kāi)
    的頭像 發(fā)表于 11-17 10:12 ?5638次閱讀

    Docker與虛擬機(jī)的區(qū)別

    Docker和虛擬機(jī)是兩種不同的虛擬化技術(shù),它們?cè)?b class='flag-5'>實(shí)現(xiàn)方式、資源消耗、運(yùn)行性能等方面存在許多差異。本文將會(huì)詳細(xì)介紹它們的區(qū)別。 一、
    的頭像 發(fā)表于 11-23 09:37 ?1w次閱讀

    怎么安裝linux虛擬機(jī)

    在計(jì)算機(jī)領(lǐng)域,虛擬機(jī)是一種軟件程序,它允許在主操作系統(tǒng)上運(yùn)行多個(gè)虛擬操作系統(tǒng)。Linux虛擬機(jī)在開(kāi)發(fā)、測(cè)試和學(xué)習(xí)等環(huán)境中得到廣泛應(yīng)用。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-23 10:50 ?1307次閱讀

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)

    與外部網(wǎng)絡(luò)通信。本文將詳細(xì)介紹虛擬機(jī)Ubuntu的網(wǎng)絡(luò)連接方法以及一些常見(jiàn)的網(wǎng)絡(luò)問(wèn)題解決辦法。 一、虛擬機(jī)網(wǎng)絡(luò)概述
    的頭像 發(fā)表于 12-27 16:51 ?1281次閱讀
    主站蜘蛛池模板: 欧洲另类一二三四区 | 爱爱免费 | 色老头成人免费视频天天综合 | 天天射色综合 | 户外露出精品视频国产 | 久久天天干 | 国内精品一区二区在线观看 | 亚洲综合一 | 国产一级大片免费看 | 久青草国产高清在线视频 | 97人人做人人添人人爱 | 1000部啪啪未满十八勿入中国 | 99久久精品费精品国产 | 日本黄网站高清色大全 | 日韩一级精品视频在线观看 | 亚洲另类激情综合偷自拍 | 国产成人亚洲毛片 | 五月天综合婷婷 | 日本欧美一区二区三区免费不卡 | 亚洲五月综合缴情婷婷 | 久久9精品 | 第四色男人天堂 | 97伊人久久 | 欧美日韩啪啪 | 国产黄网站 | 香蕉视频黄色片 | 日韩精品无码一区二区三区 | 日本亚洲高清乱码中文在线观看 | 男人操女人的网站 | 日本黄色录像视频 | 日韩啪啪网| 欧美一区二区三区在线观看免费 | 国产精品视频一区国模私拍 | 午夜视频在线看 | 天天夜夜啦啦啦 | 久久精品国产清自在天天线 | 天天射天天爱天天干 | 夜夜爱夜夜爽 | 天天爽夜夜爽人人爽曰喷水 | 天天射狠狠干 | 国产成人免费无庶挡视频 |