版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
這這jv的對(duì)象頭在對(duì)象的不同狀態(tài)下會(huì)有不同的表現(xiàn)形式,主要有三種狀態(tài),無(wú)鎖狀態(tài)、加鎖狀態(tài)、gc標(biāo)記狀態(tài)。那么我可以理解jva碼塊。但是v當(dāng)中的鎖有分為很多種,從上圖可以看出大體分為偏向鎖、輕量析,我們只有合理的設(shè)計(jì)代碼,才能合理的利用鎖、那么這三種鎖的原理是什publicpublicclassA3packagepackageimportimportimportstatic5publicclassJOLExample1publicstaticvoidmain(String[]args)throwsException}11))))#Running64‐bitHotSpot#Usingcompressedoopwith0‐bit#Usingcompressedklasswith3‐bit#Objectsare8bytes#Fieldsizesbytype:4,1,1,2,2,4,4,8,8#Arrayelementsizes:4,1,1,2,2,4,4,8,87com.luban.layout.AobjectOFFSETSIZETYPEDESCRIPTION04(objectheader)0100000044(objectheader)00000000(84(objectheader)82220120)124(lossduetothenextobjectInstancesize:16Spacelosses:0bytesinternal+4bytesexternal=4bytes)1Field1Fieldsizesbytype411224488[bytes]對(duì)應(yīng):[Oop(OrdinaryObjectPointer),boolean,byte,char,short,int,float,long,double]大小整個(gè)對(duì)象一共B,其中對(duì)象頭(bjecthrBB字節(jié)(因?yàn)樵?位虛擬機(jī)上對(duì)象的大小必須是的倍數(shù))B??jī)蓚€(gè)問(wèn)題publicpublicclassAbooleanflag4#Running#Running64‐bitHotSpot#Usingcompressedoopwith0‐bit#Usingcompressedklasswith3‐bit#Objectsare8bytes#Fieldsizesbytype:4,1,1,2,2,4,4,8,8#Arrayelementsizes:4,1,1,2,2,4,4,8,878com.luban.layout.Aobject9OFFSETSIZETYPEDESCRIPTION04(objectheader)01000000))44(object00000000)84(object82220120)()121boolean133133(lossduetothenextobjectInstancesize:16Spacelosses:0bytesinternal+3bytesexternal=3bytes整個(gè)對(duì)象的大小還是沒(méi)有改變一共16B,其中對(duì)象頭(Object關(guān)于java首先openjdk文檔當(dāng)中對(duì)對(duì)象頭的解objectCommonstructureatthebeginningofeveryGC-managedheapobject.(Everyooppointstoanobjectheader.)Includesfundamentalinformationabouttheheapobject'slayout,type,GCstate,synchronizationstate,andidentityhashcode.Consistsoftwowords.Inarraysitisimmediayfollowedbyalengthfield.NotethatbothJavaobjectsandVM-internalobjectshaveacommonobjectheaderformat上述中提到一個(gè)java對(duì)象頭包含了2個(gè)word,并且好包含了堆對(duì)象的布markThefirstwordofeveryobjectheader.Usuallyasetofbitfieldsincludingsynchronizationstateandidentityhashcode.Mayalsobeapointer(withcharacteristiclowbitencoding)tosynchronizationrelatedinformation.DuringGC,maycontainGCstatebits. klassThesecondwordofeveryobjectheader.Pointstoanotherobject(ametaobject)whichdescribesthelayoutandbehavioroftheoriginalobject.ForJavaobjects,the"klass"containsaC++style"vtable". 的源碼注釋中得知到一個(gè)markword一個(gè)是64bit,那么klass的長(zhǎng)度是多少呢?根據(jù)上述利用JOL打印的對(duì)象頭信息可以知道一個(gè)對(duì)象頭是12B,其中8B是markword4B就是klassword了,和鎖相關(guān)的就是markword了,那么接下來(lái)重點(diǎn)分析markword里面信息publicstaticvoidmain(String[]args)throwsExceptionAa=newout.println("befor//JVM計(jì)算的out.println("after13beforcom.luban.layout.AobjectOFFSETSIZETYPEDESCRIPTION04(objectheader)01000000 44(objectheader)00000000 6678984(objectheader)43c10020)121booleanA.flag133(lossduetothenextobjectInstancesize:16Spacelosses:0bytesinternal+3bytesexternal=3bytes)afterhashcom.luban.layout.Aobjectinternals:OFFSETSIZETYPEDESCRIPTIONVALUE04(objectheader)019409e4)44(objectheader)6a000000))(84(objectheader)43c10020)121booleanA.flag133(lossduetothenextobjectalignment)Instancesize:16bytesSpacelosses:0bytesinternal+3bytesexternal=3bytes)26Processfinishedwithexitcode Stringcode= 20分析結(jié)果 印完hashcode之后 儲(chǔ)。其中2行是我們通過(guò)hashcde方法打印的結(jié)果,行是我根據(jù)-B的信息計(jì)算出來(lái)的hashcde,所以以確定對(duì)象頭當(dāng)中的markwok里面的后七個(gè)字節(jié)的是hashcd信息,那么第一個(gè)字節(jié)當(dāng)中的八位分別存的就是分帶、偏向鎖信息,和對(duì)象狀態(tài),這個(gè)t分別表示的信息如下圖(其實(shí)上圖也有信息),關(guān)于對(duì)象狀態(tài)一共分為五種狀態(tài),分別是無(wú)鎖、偏向鎖、輕量鎖、重量鎖、C標(biāo)記,那么t,如何能表示五種狀態(tài)(bt4中狀態(tài)分別是:1,m做的比較好的是把偏向鎖和無(wú)鎖狀態(tài)表示為同一個(gè)狀態(tài),根據(jù)偏向標(biāo)識(shí)標(biāo)識(shí)鎖還向鎖。什思呢個(gè)代碼分析一下,在寫(xiě)代碼之前我們先記得無(wú)鎖狀態(tài)下的信息 ,然寫(xiě)一個(gè)偏向鎖的例子看看結(jié)果packagepackageimportimportstatic45publicclassJOLExample2staticstaticApublicstaticvoidmain(String[]args)throwsExceptiona=newout.println("befreout.println("after}publicstaticvoidsync()throwsInterruptedExceptionsynchronized} 23404 544 684 ))7121boolean133(lossduetothenextobjectInstancesize:16Spacelosses:0bytesinternal+3bytesexternal=3bytesaftercom.luban.layout.AobjectOFFSETSIZETYPEDESCRIPTION04(objectheader)01000000)44(objectheader)00000000)(84(objectheader)43c10020)121booleanA.flag133(lossduetothenextobject)分析結(jié)果上面這個(gè)程序只有一個(gè)線程去調(diào)用sync 和無(wú)鎖的時(shí)候一模一 們可以直接通過(guò)JVM的參數(shù)來(lái)禁用延遲-XX:+UseBiasedLocking-packagepackageimportpackagepublicclassAintpublicsynchronizedvoid}7importimportstatic//‐XX:BiasedLockingStartupDelay=20000publicclassJOLExample3publicstaticvoidmain(String[]args)throwsExceptionAa=newlongstart=9for(inti=0;i<}Llongend=System.out.println(String.format("%sms",end‐ 19那么問(wèn)題來(lái)了,什么是輕量級(jí)鎖呢?工作原理是什么呢?為什么比偏向鎖慢?輕量級(jí)鎖嘗試在應(yīng)用層面解決線程同步問(wèn)題,而不觸發(fā)操作系統(tǒng)的互斥操作,輕量級(jí)鎖減少多線程進(jìn)入互斥的幾率,不能代替互斥packagepackageimportimportstatic4publicclassJOLExample5staticApublicstaticvoidmain(String[]args)throwsExceptiona=newout.println("befreout.println("after} publicstaticvoidsync()throwsInterruptedExceptionsynchronizedsynchronizedout.println("lock}}221package1package23import4568publicclassJOLExample4staticCountDownLatchcountDownLatch=newpublicstaticvoidmain(String[]args)throwsException{finalAa=newA();79 longstart= L來(lái)計(jì) for(intnewpublicvoidrun()while(countDownLatch.getCount()>0)}}}longend=System.out.println(String.format("%sms",end‐ 30packageimportimportstatic4publicclassJOLExample6staticApublicstaticvoidmain(String[]args)throwsExceptiona=newout.println("befreThreadt1=newpublicvoidrun()synchronizedtrySystem.out.println("t1}catch(InterruptedExceptione)}}}out.println("t1lockout.println("afterout.println("after}publicstaticvoidsync()throwsInterruptedExceptionsynchronizedSystem.out.println("t1main}}441package1package23import45importstatic6publicclassJOLExample7staticApublicstaticvoidmain(String[]args)throwsExceptiona=newout.println("befreThreadt1=newpublicvoidrun()synchronizedtrysynchronized(a)System.out.println("beforeSystem.out.println("after}}catch(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度柑橘滯銷產(chǎn)品線上推廣與“搶購(gòu)”銷售合同3篇
- 2024瑜伽館瑜伽教練勞動(dòng)合同范本及教練休息時(shí)間規(guī)定3篇
- 2024版雞蛋簡(jiǎn)單購(gòu)銷合同
- 2025年度養(yǎng)老設(shè)施建設(shè)承包合同范本權(quán)威版4篇
- 2025年度智能交通信號(hào)控制系統(tǒng)研發(fā)與推廣合同4篇
- 2024知識(shí)產(chǎn)權(quán)許可使用合同許可人和被許可人
- 2025年度漁業(yè)生態(tài)循環(huán)承包經(jīng)營(yíng)合同4篇
- 2024版魚(yú)苗的購(gòu)銷合同范本
- 2025年度智慧能源管理系統(tǒng)承包合作協(xié)議范文4篇
- 2025年度醫(yī)院手術(shù)室設(shè)備供應(yīng)及承包運(yùn)營(yíng)協(xié)議4篇
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- DB11-T 825-2021綠色建筑評(píng)價(jià)標(biāo)準(zhǔn)
- 人教版八年級(jí)下冊(cè)英語(yǔ)單詞默寫(xiě)(可直接打印)
- 糖廠熱力衡算(6000噸每天)
- 燃?xì)庥邢薰疚kU(xiǎn)作業(yè)安全管理規(guī)定
- 北京市刑事訴訟律師事務(wù)所函(擔(dān)任訴訟代理人適用)格式文書(shū)(2020版)
- XX鎮(zhèn)“我為群眾辦實(shí)事”滿意度調(diào)查問(wèn)卷
- (完整版)Brownbear繪本
- 魯教版初中英語(yǔ)七年級(jí)下冊(cè)單詞漢語(yǔ)(背誦)
- 玻璃纖維拉絲作業(yè)中幾個(gè)常見(jiàn)問(wèn)題的處理
- 鐵路信號(hào)室內(nèi)施工總結(jié)
評(píng)論
0/150
提交評(píng)論