Java創(chuàng)建對象的過程簡介

Java創(chuàng)建對象的過程

簡單記錄一下Java創(chuàng)建對象的過程哟冬,就是new一個對象的時候發(fā)生了哪些事情洁仗。Java程序執(zhí)行的過程在此不作說明,對象的創(chuàng)建過程只是程序執(zhí)行過程的一部分。有關整個程序執(zhí)行的過程瘩绒,等熟悉了虛擬機之后在作說明。

對象創(chuàng)建過程簡述

Java中對象的創(chuàng)建就是在堆上分配內存空間的過程带族,此處說的對象創(chuàng)建僅限于new關鍵字創(chuàng)建的普通Java對象锁荔,不包括數(shù)組對象的創(chuàng)建。

大致過程如下:

  1. 檢測類是否被加載
  2. 為對象分配內存
  3. 為分配的內存空間初始化零值
  4. 對對象進行其他設置
  5. 執(zhí)行init方法

檢測類是否被加載

當虛擬機執(zhí)行到new時蝙砌,會先去常量池中查找這個類的符號引用阳堕。如果能找到符號引用,說明此類已經被加載到方法區(qū)(方法區(qū)存儲虛擬機已經加載的類的信息)择克,可以繼續(xù)執(zhí)行恬总;如果找不到符號引用,就會使用類加載器執(zhí)行類的加載過程肚邢,類加載完成后繼續(xù)執(zhí)行壹堰。

為對象分配內存

類加載完成以后拭卿,虛擬機就開始為對象分配內存,此時所需內存的大小就已經確定了贱纠。只需要在堆上分配所需要的內存即可峻厚。

具體的分配內存有兩種情況:第一種情況是內存空間絕對規(guī)整,第二種情況是內存空間是不連續(xù)的谆焊。

  • 對于內存絕對規(guī)整的情況相對簡單一些目木,虛擬機只需要在被占用的內存和可用空間之間移動指針即可,這種方式被稱為指針碰撞懊渡。

  • 對于內存不規(guī)整的情況稍微復雜一點刽射,這時候虛擬機需要維護一個列表,來記錄哪些內存是可用的剃执。分配內存的時候需要找到一個可用的內存空間誓禁,然后在列表上記錄下已被分配,這種方式成為空閑列表肾档。

分配內存的時候也需要考慮線程安全問題摹恰,有兩種解決方案:

  • 第一種是采用同步的辦法,使用CAS來保證操作的原子性怒见。
  • 另一種是每個線程分配內存都在自己的空間內進行俗慈,即是每個線程都在堆中預先分配一小塊內存,稱為本地線程分配緩沖(TLAB)遣耍,分配內存的時候再TLAB上分配闺阱,互不干擾。

為分配的內存空間初始化零值

對象的內存分配完成后舵变,還需要將對象的內存空間都初始化為零值酣溃,這樣能保證對象即使沒有賦初值,也可以直接使用纪隙。

對對象進行其他設置

分配完內存空間赊豌,初始化零值之后,虛擬機還需要對對象進行其他必要的設置绵咱,設置的地方都在對象頭中碘饼,包括這個對象所屬的類,類的元數(shù)據(jù)信息悲伶,對象的hashcode艾恼,GC分代年齡等信息。

執(zhí)行init方法

執(zhí)行完上面的步驟之后拢切,在虛擬機里這個對象就算創(chuàng)建成功了蒂萎,但是對于Java程序來說還需要執(zhí)行init方法才算真正的創(chuàng)建完成,因為這個時候對象只是被初始化零值了淮椰,還沒有真正的去根據(jù)程序中的代碼分配初始值,調用了init方法之后,這個對象才真正能使用主穗。

到此為止一個對象就產生了泻拦,這就是new關鍵字創(chuàng)建對象的過程。過程如下:

檢測類是否被加載-->為對象分配內存空間-->初始零值-->進行必要的設置-->調用init方法進行初始化忽媒。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末争拐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晦雨,更是在濱河造成了極大的恐慌架曹,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闹瞧,死亡現(xiàn)場離奇詭異绑雄,居然都是意外死亡,警方通過查閱死者的電腦和手機奥邮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門万牺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洽腺,你說我怎么就攤上這事脚粟。” “怎么了蘸朋?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵核无,是天一觀的道長。 經常有香客問我藕坯,道長厕宗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任堕担,我火速辦了婚禮已慢,結果婚禮上,老公的妹妹穿的比我還像新娘霹购。我一直安慰自己佑惠,他們只是感情好,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布齐疙。 她就那樣靜靜地躺著膜楷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贞奋。 梳的紋絲不亂的頭發(fā)上赌厅,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機與錄音轿塔,去河邊找鬼特愿。 笑死仲墨,一個胖子當著我的面吹牛,可吹牛的內容都是我干的揍障。 我是一名探鬼主播目养,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毒嫡!你這毒婦竟也來了癌蚁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤兜畸,失蹤者是張志新(化名)和其女友劉穎努释,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咬摇,經...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡伐蒂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菲嘴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饿自。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖龄坪,靈堂內的尸體忽然破棺而出昭雌,到底是詐尸還是另有隱情,我是刑警寧澤健田,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布烛卧,位于F島的核電站,受9級特大地震影響妓局,放射性物質發(fā)生泄漏总放。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一好爬、第九天 我趴在偏房一處隱蔽的房頂上張望局雄。 院中可真熱鬧,春花似錦存炮、人聲如沸炬搭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宫盔。三九已至,卻和暖如春享完,著一層夾襖步出監(jiān)牢的瞬間灼芭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工般又, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留彼绷,地道東北人巍佑。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像苛预,于是被迫代替她去往敵國和親句狼。 傳聞我的和親對象是個殘疾皇子笋熬,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內容

  • 從三月份找實習到現(xiàn)在热某,面了一些公司,掛了不少胳螟,但最終還是拿到小米昔馋、百度、阿里糖耸、京東秘遏、新浪、CVTE嘉竟、樂視家的研發(fā)崗...
    時芥藍閱讀 42,281評論 11 349
  • 一邦危、運行時數(shù)據(jù)區(qū)域 Java虛擬機管理的內存包括幾個運行時數(shù)據(jù)內存:方法區(qū)、虛擬機棧舍扰、本地方法棧倦蚪、堆、程序計數(shù)器边苹,...
    加油小杜閱讀 1,523評論 1 15
  • 《深入理解Java虛擬機》筆記_第一遍 先取看完這本書(JVM)后必須掌握的部分陵且。 第一部分 走近 Java 從傳...
    xiaogmail閱讀 5,111評論 1 34
  • 一 、java虛擬機底層結構詳解 我們知道个束,一個JVM實例的行為不光是它自己的事慕购,還涉及到它的子系統(tǒng)、存儲區(qū)域茬底、...
    葡萄喃喃囈語閱讀 1,490評論 0 4
  • 偷懶的好多天沪悲,感覺每天都很累 偷懶了很多天,感覺每天都很累阱表。提個筆需要很大的勇氣(╥﹏╥)
    ISA依莎的木棉花閱讀 341評論 1 0