中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

當Jvm遇到new關鍵字會發生什么

發布時間:2021-07-13 09:05:54 來源:億速云 閱讀:139 作者:chen 欄目:大數據

這篇文章主要介紹“當Jvm遇到new關鍵字會發生什么”,在日常操作中,相信很多人在當Jvm遇到new關鍵字會發生什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”當Jvm遇到new關鍵字會發生什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在上一篇我們知道了Jvm的內存劃分,這一篇我們來具體分析一下,當我們用new關鍵字創建一個新對象時,Jvm都做了哪些工作。當虛擬機執行到new指令時,發現它是關鍵字,于是會檢查這個指令參數是否能在常量池中找到相關的引用,并檢查這個引用所代表的類是否被加載、解析和初始化過。如果沒有被加載,則先執行類的加載過程。當類加載成功后,虛擬機就會為新創建的對象分配內存。分配內存無非就是在Java堆上劃出一部分區域來作為新對象的存儲空間。但在實際的處理時是比較麻煩的。例如怎么找到空閑的內存,如何劃分固定大小內存。我們知道Java虛擬機規范中所說虛擬機中的堆內存可以是連續的也可以是不連續的。所以虛擬機在為對象分配新內存時,就要根據這兩種不同的方式來采取不同的實現。這兩種方式分別叫作:指針碰撞和空閑列表。正面我們分別看一下它們具體的實現方式。

  • 指針碰撞:所謂的連續內存是指Java堆中的內存是絕對規整的,用過的內存在一邊,空閑的內存在另一邊。中間有個指針作為分界點,這時如果要分配新內存,只要指針向空閑的內存一方移動一下就可以了。這種分配內存的方式就叫指針碰撞。

  • 空閑列表:如果Java堆中的內存并不是完整的,也就是不是連續的。這時使用的內存和空閑的內存沒有任何規則,無法用指針碰撞的方式,來分配內存。這時虛擬機只能采取其它辦法來標識出哪些內存是使用的,哪些內存是空閑的,所以虛擬機就要維護一個列表,用來存儲哪些內存是空閑的,分配內存時,只要從列表中劃分一塊區域存儲對象實例,并更新列表上的記錄就可以了。這種方式就叫空閑列表。

由于不同的虛擬機所采用的內存分配方式是不同的,所以上述主要說明兩種分配內存的方式,虛擬機到底采用哪種方式由不同虛擬機的堆自行決定。

上述的過程只是給對象分配了相關的內存空間,但對象還是空的,內存數據要怎么保存對象的信息呢?在虛擬機中對象在內存中存儲主要分3個區域:

  • 對象頭:主要包括兩部分一個是對象自己的運行數據如哈希碼、GC分代年齡、鎖狀態標識、線程持有的鎖、偏向線程ID等官方稱知為Mark Word。對象頭的另一部分就是類型指針,也就是對象指向類元數據的指針,虛擬機通過這個指針確定這個對象是哪個類的實例。對象頭的信息是不固定的,如果對象是一個數組,那么在對象頭中就會有記錄數組長度的信息。

當Jvm遇到new關鍵字會發生什么

  • 實例數據:也就是程序中自定義的各種字段的類型和內容,包括父類或子類的數據都在這里保存,這是對象真正的存儲的有效信息。

  • 對齊填充:主要的作是就是占位符。因為虛擬機要求對象起始地址必須是8字節的整數倍也就是對象大小必須是8的整數倍,因此,如果對象的實例數據沒有對齊時,就會需要通過對齊填充來補齊。

對象現在已經創建完了,但它是存儲在堆上的,為了方便我們操作堆中的對象,Java是通過棧上的引用數據來操作堆上的具體對象的。這個引用是使用直接指針訪問的。堆中要存儲這個指針的相關信息,而引用存儲的就是該對象的內存地址。

當Jvm遇到new關鍵字會發生什么

到此,關于“當Jvm遇到new關鍵字會發生什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

榆树市| 天水市| 澳门| 奉化市| 巴青县| 克拉玛依市| 崇阳县| 仁寿县| 石狮市| 土默特右旗| 潞西市| 龙门县| 徐汇区| 读书| 湖口县| 广南县| 交城县| 夏河县| 榆树市| 济宁市| 罗城| 北安市| 德昌县| 峨边| 麦盖提县| 贵德县| 个旧市| 垫江县| 万盛区| 永昌县| 米脂县| 桑植县| 漳州市| 津南区| 波密县| 璧山县| 霞浦县| 阿图什市| 鱼台县| 高唐县| 射洪县|