中文字幕av高清_国产视频一二区_男女羞羞羞视频午夜视频_成人精品一区_欧美色视_在线视频这里只有精品

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > new 一個(gè)對(duì)象的過(guò)程和clone 一個(gè)對(duì)象的過(guò)程?

new 一個(gè)對(duì)象的過(guò)程和clone 一個(gè)對(duì)象的過(guò)程?

來(lái)源:千鋒教育
發(fā)布人:qyf
時(shí)間: 2022-06-07 16:18:00 1654589880

  對(duì)象的創(chuàng)建過(guò)程

  1、類(lèi)加載

  當(dāng)虛擬機(jī)遇到一個(gè) new 指令的時(shí)候,會(huì)先去檢測(cè)這個(gè)指令的參數(shù)是否能定位到這個(gè)類(lèi)的符號(hào)引用,并檢查這個(gè)類(lèi)是否被加載、解析、初始化過(guò)(在 JVM 的方法區(qū)中檢查)。如果沒(méi)有,則執(zhí)行類(lèi)加載(類(lèi)加載機(jī)制)

  2、內(nèi)存分配

  在類(lèi)加載通過(guò)之后,虛擬機(jī)將為新生對(duì)象分配內(nèi)存,對(duì)象所需內(nèi)存的大小在類(lèi)加載完成后便可完全確定,相當(dāng)于從 Java 堆中抽取一塊內(nèi)存出來(lái);而根據(jù)內(nèi)存的是否絕對(duì)規(guī)整,分為指針碰撞和空閑列表兩種分配方式:

  指針碰撞:假設(shè) Java 堆中的內(nèi)存是絕對(duì)規(guī)整的,分為空閑和非空閑兩種,中間用一個(gè)指針當(dāng)做劃分界限的指示器;當(dāng)一個(gè)新對(duì)象需要分配對(duì)象時(shí),相當(dāng)于把指針向空閑區(qū)域移動(dòng)一段與對(duì)象大小相等的距離。

  空閑列表:假設(shè) Java 堆的內(nèi)存不是絕對(duì)規(guī)整的,空閑和非空閑是相互交錯(cuò)的,那就需要一個(gè) OopMap 列表,用來(lái)記錄哪些內(nèi)存塊是可以用的,在對(duì)象分配內(nèi)存時(shí),劃分一塊大小相等的區(qū)域給對(duì)象,并更新這個(gè)列表

  從上面的解釋看,用哪種分配方式,是通過(guò) Java 堆的內(nèi)存塊是否絕對(duì)規(guī)整決定的。

  堆內(nèi)存是否規(guī)整,主要是看 GC 回收了內(nèi)存之后是否包含壓縮或者整理功能.如果有,那么內(nèi)存就比較規(guī)整.否則如果沒(méi)有,創(chuàng)建對(duì)象就需要采用空閑列表的方式.

  比如:serial,ParNew 等帶有整理的收集器,可以使用指針碰撞.CMS 使用簡(jiǎn)單清除的算法,可以使用空閑列表.

  但對(duì)象的創(chuàng)建是頻繁的,在并發(fā)的情況,多線(xiàn)程不一定是安全的,即存在 A 對(duì)象在分配內(nèi)存,指針還未來(lái)得及修改,B 對(duì)象也同時(shí)使用了原來(lái)的指針來(lái)分配對(duì)象。所以又衍生了兩種解決辦法,CAS+失敗重試 和 TLAB 兩種方式

  CAS+失敗重試:虛擬機(jī)采用 CAS 配上失敗重試的方式保證更新操作的原子性 (關(guān)于 CAS 鎖,是樂(lè)觀(guān)鎖的一種實(shí)現(xiàn),解釋起來(lái)也比較麻煩,

  TLAB:本地線(xiàn)程分配緩沖,把內(nèi)存分配的動(dòng)作按照線(xiàn)程分配劃分在不同的空間中進(jìn)行,即每個(gè)線(xiàn)程在 Java 堆中預(yù)先分配一小塊內(nèi)存,哪個(gè)線(xiàn)程需要需要分配,先在 TLAB 中分配,用完了并重新分配新的 TLAB 時(shí),才需要同步鎖定。

  3、初始值為零

  在內(nèi)存分配完成之后,虛擬機(jī)需要將分配到的內(nèi)存空間初始化為零值 (除對(duì)象頭外),這一步操作也保證了對(duì)象的實(shí)例字段在 java 代碼中可以不賦初始值就可以使用,因?yàn)槌绦蚰茉L(fǎng)問(wèn)這些字段的數(shù)據(jù)類(lèi)型所對(duì)應(yīng)的零值。

  4、設(shè)置對(duì)象頭

  初始值設(shè)置之后,怎么知道對(duì)象是哪個(gè)類(lèi)的實(shí)例,如何才能找到類(lèi)的元數(shù)據(jù)信息、哈希碼、GC 分代年齡等信息呢?這就需要對(duì)對(duì)象頭進(jìn)行一些必要的設(shè)置,才能定位到。

  5、入棧、執(zhí)行 init 指令

  從虛擬機(jī)來(lái)看,對(duì)象已經(jīng)分配產(chǎn)生完成了,且入棧了;但 Java 程序來(lái)看,這才剛開(kāi)始,所以,new 之后,則執(zhí)行 init 方法,進(jìn)行初始化。

  6、Java 對(duì)象的內(nèi)存分布(即實(shí)例化后的對(duì)象在堆中的分布)

  對(duì)象在內(nèi)存中的存儲(chǔ)布局可分為 3 部分:

圖片 2

  對(duì)象頭

  其中對(duì)象頭又可以細(xì)分為兩部分:

  1、存儲(chǔ)對(duì)象自身運(yùn)行時(shí)數(shù)據(jù):如哈希碼、GC 分代年齡、鎖狀態(tài)標(biāo)志、線(xiàn)程持有的、偏向線(xiàn)程 ID 等信息

  2、類(lèi)型指針:即對(duì)象指向它的類(lèi)元數(shù)據(jù)的指針,虛擬機(jī)通過(guò)這個(gè)來(lái)確定這個(gè)對(duì)象是哪個(gè)類(lèi)的實(shí)例(比如是指向棧中的類(lèi)聲明)

  實(shí)例數(shù)據(jù)

  是對(duì)象真正存儲(chǔ)的有效信息,比如程序中定義的各種類(lèi)型的字段內(nèi)容,無(wú)論父類(lèi)和子類(lèi)都會(huì)記錄下來(lái);在分配時(shí),相同寬度的字段會(huì)被分配到一起,這也是父類(lèi)定義的變量會(huì)出現(xiàn)在子類(lèi)之前的原因。

  對(duì)齊填充

  沒(méi)啥實(shí)際意義,就是為了保證對(duì)象是 8 個(gè)字節(jié)的整數(shù)倍,沒(méi)對(duì)齊時(shí),用來(lái)補(bǔ)全而已。

  7、對(duì)象的訪(fǎng)問(wèn)定位

  使用對(duì)象時(shí),通過(guò)棧上的 reference 數(shù)據(jù)來(lái)操作堆上的具體對(duì)象。

  建立對(duì)象是為了使用對(duì)象,Java 程序需要通過(guò)棧上的 reference 數(shù)據(jù)來(lái)操作堆上的具體對(duì)象;但這些訪(fǎng)問(wèn)方式取決于虛擬機(jī)實(shí)現(xiàn)而定,目前主流有句柄和直接指針兩種:

  句柄:從 Java 堆中劃分出一塊內(nèi)存用來(lái)作為句柄池,reference 中存儲(chǔ)的就是對(duì)象的句柄地址,而句柄包含了對(duì)象實(shí)例數(shù)據(jù)與類(lèi)型數(shù)據(jù)各自的具體地址信息,如下圖(圖片來(lái)自 Java 虛擬機(jī)第三版)

圖片 3

  直接指針:在直接指針中,reference 儲(chǔ)存的就是對(duì)象地址,所以,需要考慮的是如何防止訪(fǎng)問(wèn)類(lèi)型數(shù)據(jù)的相關(guān)信息(圖片來(lái)自 Java 虛擬機(jī)第三版)

圖片 4

  優(yōu)點(diǎn)介紹:

  句柄:使用句柄好處是,reference 中存放的是文檔的句柄地址,對(duì)象被移動(dòng)時(shí),只改變句柄的實(shí)例數(shù)據(jù)指針,而 reference 本身不需要修改

  直接指針:使用直接指針的最大好處就是速度更快,節(jié)省了指針定位的開(kāi)銷(xiāo);

  HotSpot 使用第二種方式進(jìn)行對(duì)象訪(fǎng)問(wèn)的.

  三、對(duì)象的具體實(shí)例化過(guò)程

  1、 在堆內(nèi)存中開(kāi)辟一塊空間

  2、 開(kāi)辟空間分配一個(gè)地址(指針碰撞或者空閑列表兩種分配方式)

  3、把對(duì)象的所有非靜態(tài)成員加載到所開(kāi)辟的空間下(從方法區(qū)的非靜態(tài)區(qū)域中加載,類(lèi)加載的時(shí)候.class 文件的非靜態(tài)內(nèi)容就是加載到這里的)

  4、 所有的非靜態(tài)成員加載完成之后,對(duì)所有非靜態(tài)成員變量進(jìn)行默認(rèn)初始化

  5、 所有非靜態(tài)成員變量默認(rèn)初始化完成之后,調(diào)用構(gòu)造函數(shù)

  6、 在構(gòu)造函數(shù)入棧執(zhí)行時(shí),分為兩部分:先執(zhí)行構(gòu)造函數(shù)中的隱式三步,再執(zhí)行構(gòu)造函數(shù)中書(shū)寫(xiě)的代碼:.1、隱式三步:1、執(zhí)行 super 語(yǔ)句,2、對(duì)開(kāi)辟空間下的所有非靜態(tài)成員變量進(jìn)行顯式初始化3、執(zhí)行構(gòu)造代碼塊(注:代碼塊與非靜態(tài)成員變量顯示初始化無(wú)先后順序,與代碼順序相關(guān),如代碼塊在上,則先加載代碼塊),4、在隱式三步執(zhí)行完之后,執(zhí)行構(gòu)造函數(shù)中書(shū)寫(xiě)的代碼

  7、在整個(gè)構(gòu)造函數(shù)執(zhí)行完并彈棧后,把空間分配的地址賦值給一個(gè)引用對(duì)象(對(duì)象的訪(fǎng)問(wèn)定位有句柄和直接指針兩種方式)

  至此,Java 堆中有一塊內(nèi)存新的內(nèi)存 存儲(chǔ)這個(gè)實(shí)例化的對(duì)象,對(duì)象里面包含了對(duì)象頭、實(shí)例數(shù)據(jù)以及對(duì)齊填充。其中對(duì)象頭又可以細(xì)分為兩部分:

  1、存儲(chǔ)對(duì)象自身運(yùn)行時(shí)數(shù)據(jù):如哈希碼、GC 分代年齡、鎖狀態(tài)標(biāo)志、線(xiàn)程持有的、偏向線(xiàn)程 ID 等信息

  2、類(lèi)型指針:即對(duì)象指向它的類(lèi)元數(shù)據(jù)的指針,虛擬機(jī)通過(guò)這個(gè)來(lái)確定這個(gè)對(duì)象是哪個(gè)類(lèi)的實(shí)例(比如是指向棧中的類(lèi)聲明)

  實(shí)例數(shù)據(jù)是對(duì)象真正存儲(chǔ)的有效信息。對(duì)齊填充沒(méi)什么大用處。

  更多關(guān)于“Java培訓(xùn)”的問(wèn)題,歡迎咨詢(xún)千鋒教育在線(xiàn)名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專(zhuān)業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助理你實(shí)現(xiàn)java程序員夢(mèng)想。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
抖音小店怎么做代銷(xiāo)

抖音已經(jīng)成為了一個(gè)非常受歡迎的短視頻應(yīng)用程序,在其中許多用戶(hù)都精心打造了自己的小店,用于銷(xiāo)售各種各樣的商品,獲取額外的收入。然而,要想...詳情>>

2023-10-08 15:28:41
怎樣開(kāi)抖音小店帶貨賺錢(qián)

隨著直播帶貨的火熱,越來(lái)越多的人開(kāi)始嘗試通過(guò)抖音小店來(lái)開(kāi)展帶貨業(yè)務(wù)。抖音小店是抖音直播帶貨的配套,可以讓用戶(hù)在購(gòu)買(mǎi)直播中產(chǎn)品時(shí)就實(shí)現(xiàn)購(gòu)...詳情>>

2023-10-08 15:06:36
能不能幫我打開(kāi)抖音小店店鋪呢怎么弄

抖音小店是近年來(lái)非常火爆的一個(gè)網(wǎng)絡(luò)業(yè)務(wù),也是提供了很多商業(yè)機(jī)會(huì)的平臺(tái)。對(duì)于一個(gè)創(chuàng)業(yè)者而言,開(kāi)設(shè)抖音小店是一個(gè)不錯(cuò)的選擇。但是,許多小店...詳情>>

2023-10-08 15:01:21
藍(lán)v抖音小店怎么開(kāi)通店鋪

藍(lán)v抖音小店是一個(gè)非常熱門(mén)的電商平臺(tái),它可以讓賣(mài)家在抖音上開(kāi)設(shè)自己的店鋪,從而出售自己的商品。隨著抖音的不斷發(fā)展壯大,越來(lái)越多的賣(mài)家希...詳情>>

2023-10-08 14:51:53
抖音小店怎么更改類(lèi)目名稱(chēng)

抖音小店是現(xiàn)在非常火熱的一種網(wǎng)店形態(tài),許多小生意也從中獲得了收益。但是隨著經(jīng)營(yíng)時(shí)間的增長(zhǎng),小店也需要對(duì)自己的類(lèi)目名稱(chēng)進(jìn)行更改,因?yàn)檫@可...詳情>>

2023-10-08 14:46:50
快速通道
主站蜘蛛池模板: aaa日本高清在线播放免费观看 | 亚洲欧洲日本国产 | 欧美日韩精品一区 | 国产在线一二三区 | www狠狠干| 国产黄色在线免费看 | 亚洲精品一区在线观看 | 一区二区三区国产亚洲网站 | 91色站| 99久久99| 欧美四区| 久久福利| 亚洲超碰av| 成年人免费看 | 国产精品xxxx | 亚洲国产精品久久久久久 | 中文字幕毛片 | 成人免费一区二区三区视频网站 | 在线观看国产 | 亚洲社区在线观看 | www.日韩大片| 免费黄色片视频网站 | 欧美18免费视频 | 91麻豆精品国产91久久久资源速度 | 超碰97在线播放 | 欧洲精品乱码久久久久蜜桃 | 久久精品8 | 青草视频在线免费观看 | 国产精品久久久久久妇女6080 | 精品999 | 欧美一级欧美三级在线观看 | 欧美国产激情 | 成人看片网 | 一区二区三区播放 | 欧美精品久久久久久久 | 中文字幕综合在线分类 | 国产精品99一区二区三区 | 午夜影院免费观看视频 | 亚洲精品一区久久久久久 | gogo熟少妇大胆尺寸 | 男人天堂999|