亚洲综合在线一区二区三区-日韩超碰人人爽人人做人人添-麻豆国产精品久久人妻-无码人妻丰满熟妇啪啪-天堂精品一区二区三区-99久久综合狠狠综合久久aⅴ

×

java虛擬機

  • 作者:新網(wǎng)
  • 來源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-14 10:11:47

相信很多人在從事java不久都會對JVM有種神秘感以及對那些人的膜拜。每當(dāng)說起JVM大概都會想到Java虛擬機運行時數(shù)據(jù)區(qū),那么它是怎樣劃分的呢?那么今天小編就來談?wù)勎覍λ睦斫狻?/p>

   相信很多人在從事java不久都會對JVM有種神秘感以及對那些人的膜拜。每當(dāng)說起JVM大概都會想到Java虛擬機運行時數(shù)據(jù)區(qū),那么它是怎樣劃分的呢?那么今天小編就來談?wù)勎覍λ睦斫狻?/p>

psds16035.jpg

<div>         復(fù)制算法:它的出現(xiàn)就是為了解決標(biāo)記清除的不足,套路就是將內(nèi)存劃分為兩個等量大小的塊兒,對象都在其中一塊兒上,當(dāng)這一塊兒造完了就將存活的對象復(fù)制到另一塊兒上,然后將剛剛那塊兒一次清理掉,這樣就不需要考慮內(nèi)存碎片問題,動動指針按順序非配就搞定了,實現(xiàn)簡單效率高,但是代價有點大內(nèi)存直接干了一半,適用于對象存活率低的區(qū)域,比如朝生夕死的新生代。
  標(biāo)記-整理算法:復(fù)制算法看起來很吊,但是對于對象存活率高的區(qū)域就顯得力不從心了,而且如果不想浪費一半的空間的話,就需要進行空間分配擔(dān)保(抵押貸款),所以老年代不能這么搞,進而出現(xiàn)了標(biāo)記-整理算法,套路跟標(biāo)記-清除一樣,只是不直接清理可回收的對象,而是存活的往一邊兒移動,然后根據(jù)分界線去干掉另一邊兒,可以看出該算法要進行對象的移動,成本相對略高,但好處則是不會產(chǎn)生內(nèi)存碎片。
  方法區(qū)
  方法區(qū)多數(shù)人認(rèn)為的永久代,方法區(qū)與堆一樣是線程共享的內(nèi)存區(qū)域,類使用要經(jīng)過加載、連接(驗證、準(zhǔn)備、解析)和初始化,加載后的類信息就存在方法區(qū)特定的數(shù)據(jù)結(jié)構(gòu)中,主要包括:類的全路徑名包括超類(如果這個類是Object則它沒有超類)、類的類型、類的訪問修飾符、直接接口全限定名的有序列表、運行時常量池(類版本、字段、方法信息、常量、類靜態(tài)變量、裝載器信息) 等等。由于線程都共享方法區(qū),所以方法區(qū)的數(shù)據(jù)必須時線程安全的,如果有2個甚至多個線程同時訪問某個類,而這類又沒被JVM加載,那么JVM只允許一個線程去加載(雙親委派),其它線程必須等待。方法區(qū)的內(nèi)存不一定是連續(xù)的,可以動態(tài)擴展大小,可以選擇不實現(xiàn)GC,GC的目標(biāo)主要是常量池的回收和類型的卸載,所以想想就好沒多少便宜可撿,因為回收條件比較苛刻,當(dāng)方法區(qū)無法滿足內(nèi)存分配需求時將OOM(String.intern()是個好例子)。
  程序計數(shù)器
  程序計數(shù)器屬于線程私有的,它是當(dāng)前線程所執(zhí)行字節(jié)碼的指示器(執(zhí)行到那兒了),它是一塊較小的內(nèi)存空間,線程下一步該干撒就是通過字節(jié)碼解釋器改變計數(shù)器來執(zhí)行的,每個線程都有自己的程序計數(shù)器,多線程就是輪流切換它來實現(xiàn),Java方法記錄的是虛擬機字節(jié)碼指令地址,Native方法沒有記錄,程序計數(shù)器在JVM中是唯一一個沒有定義OOM的區(qū)域。
  虛擬機棧
  如程序計數(shù)器一樣,Java虛擬機棧也屬于線程私有,所以它的生命周期與線程一樣。它屬于Java方法執(zhí)行的內(nèi)存模型,每個方法執(zhí)行都會創(chuàng)建一個棧幀,主要存儲著方法出口信息、局部變量表、操作數(shù)棧、動態(tài)鏈接。當(dāng)線程請求的棧幀深度大于虛擬機所允許的深度會SOF,若虛擬機棧動態(tài)擴展時無法申請到足夠的內(nèi)存會OOM。
  方法出口信息:正常方法返回時可能需要在棧幀中保存一些信息,用來幫助恢復(fù)它的上層方法的執(zhí)行狀態(tài),如果有返回值,則把它壓入調(diào)用者棧幀的操作數(shù)棧中,調(diào)整計數(shù)器的值以指向方法調(diào)用指令后面的一條指令,若方法異常退出,那么返回地址是通過異常處理器來確定的,棧幀中一般不會保存這部分信息。
  局部變量表:所需的內(nèi)存空間在編譯期確定,一旦確定無法更改大小,它存放著編譯期的各種基本數(shù)據(jù)類型、reference類型(可能是對象引用指針,也可能是個句柄)、returnAddress類型(指向某條字節(jié)碼指令的地址)。
  操作數(shù)棧:棧幀剛創(chuàng)建時,操作數(shù)棧是沒有數(shù)據(jù)的,當(dāng)執(zhí)行方法操作時,會存放從局部變量表復(fù)制的常量或者變量,包括方法入?yún)⒑头祷刂?,操作?shù)棧都一個固定的棧深度,入棧按先進后出方式,最大深度由編譯期確定,基本類型除了long,double用2個深度,其他都用一個。
  動態(tài)鏈接:class的常量池中存在有大量的符號引用,字節(jié)碼中的方法調(diào)用指令就以常量池中指向方法的符號引用為參數(shù),這些符號引用分為兩種,一種就是類加載的時候,靜態(tài)解析的那些final 和static代碼塊,得到的直接引用,還有一種是運行期間轉(zhuǎn)化的(每個棧幀都包含一個指向運行時常量池中該棧幀所屬方法的引用),這種就是動態(tài)鏈接。
  本地方法棧
  跟虛擬機棧的作用是一個屌樣,唯一區(qū)別就是虛擬機棧是為字節(jié)碼服務(wù)的,而它是為Native方法服務(wù),與虛擬機棧一樣,當(dāng)線程請求的棧幀深度大于虛擬機所允許的深度會SOF,若虛擬機棧動態(tài)擴展時無法申請到足夠的內(nèi)存會OOM。
  直接內(nèi)存
  Direct Memory 雖然不屬于虛擬機運行數(shù)據(jù)區(qū),但在被NIO引入后一直頻繁使用(比如堆外緩存),可以用Native方法直接分配堆外內(nèi)存,然后在堆中去引用這塊兒區(qū)域(DirectByteBuffer就是),如果動態(tài)擴展內(nèi)存時達到物理內(nèi)存限制會OOM。
  內(nèi)存分配策略以及類加載機制以后再補,先寫到這兒吧,未完待續(xù)!

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)送郵件至:operations@xinnet.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 最新2020无码中文字幕在线视频| 女人被爽到高潮视频免费| 日韩精品一卡二卡3卡四卡2| 精品国产自在在线午夜精品| 久久久久国产精品人妻aⅴ网站 | 日本不卡高字幕在线2019| 中文字幕肉感巨大的乳专区| 日韩少妇激情一区二区| 国产九九久久99精品影院| 真正免费毛片在线播放| 日本高清成本人视频一区| 一本一道av无码中文字幕| 欧洲性久久精品| 成年午夜性影院| 最新亚洲人成网站在线观看| 潮喷取精10次gay在线观看| 拍摄av现场失控高潮数次| 亚洲中文精品久久久久久| 美女粉嫩饱满的一线天mp4 | 精品国偷自产在线| 国产乱人伦无无码视频试看| 中文字幕欧美精品一区二区| 青草青草久热精品视频观看 | 精品国产天堂综合一区在线| 成熟丰满熟妇av无码区| 日韩在线一区播放| 岛国av无码免费无禁网站麦芽| 免费无码又爽又刺激高潮软件| 精品国产污污免费网站入口| 亚洲gv天堂无码男同在线观看 | 国产av亚洲aⅴ一区二区| 成年入口无限观看免费完整大片| 精品国偷自产在线视频| 午夜福利免费一区二区小说| 国产精品午夜一区二区| 久久亚洲色一区二区三区| 国产内射爽爽大片| 日本丝袜诱惑一区二区| 久久久久人妻一区精品性色av| 99久久婷婷国产综合亚洲| 又爽又色禁片1000视频免费看|