(JVM)Java 對象創建的完整過程

在日常開發和面試中,經常會被問到 “Java 中對象是如何被創建的?”
表面上只是一個 new 關鍵字,但 JVM 在幕后完成了一系列復雜操作。
可以總結為以下 六大步驟

類加載檢查 → 分配內存 → 內存清零 → 設置對象頭 → 執行構造函數 → 引用賦值


一、類加載檢查

當第一次創建某個類的對象時,JVM 會先檢查這個類是否已經被加載:

  • 如果未加載,則通過 類加載器(ClassLoader).class 文件讀入內存,并在方法區中生成對應的類信息。

  • 如果已加載,則直接進入下一步。

?這保證了類的元信息只會加載一次,所有對象實例共享同一份類描述信息。


二、分配內存

類信息已準備好后,JVM 會在 堆內存 中為新對象分配空間。
分配方式依賴于堆是否規整:

  • 指針碰撞(Bump-the-pointer):堆內存連續,指針往后挪即可。

  • 空閑列表(Free List):堆內存碎片化時,從空閑鏈表中找一塊合適的內存。

?這一步決定了對象的物理存儲位置。


三、內存清零

為了避免讀取到臟數據,JVM 會將新分配的內存空間全部清零:

  • 數值型字段變為 0

  • 布爾型字段變為 false

  • 引用型字段變為 null

這是對象成員變量的默認初始化階段。


四、設置對象頭

JVM 會在新對象內存的起始位置寫入 對象頭 信息,包括:

  • Mark Word:保存哈希碼、GC 年齡、鎖狀態等運行時數據

  • Klass Pointer:指向類的元信息,表明該對象屬于哪個類

?這是對象和 JVM 交互的橋梁,GC 和鎖機制都依賴它。


五、執行構造函數

完成上述底層準備后,JVM 才會調用構造方法:

  1. 先執行父類構造函數,確保繼承鏈上的屬性都得到初始化

  2. 按照聲明順序給實例變量賦初始值

  3. 執行構造方法體中的邏輯

?這一步才是程序員在代碼中能感知到的初始化過程。


六、引用賦值

最后,新對象的引用會被返回,并賦值給棧幀中的局部變量表。
從這一刻開始,我們就可以通過引用來操作堆上的對象。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94206.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫優化提速(三)JSON數據類型在酒店管理系統搜索—仙盟創夢IDE

在 MySQL 中,JSONB 類型(MySQL 中實際為 JSON 類型,功能類似 PostgreSQL 的 JSONB,支持高效的 JSON 數據存儲和查詢)非常適合存儲半結構化數據,例如酒店入住客人的復雜信息(包含客人基本信息、入…

小程序全局狀態管理:使用MobX進行跨組件數據共享詳解(九)

一、定義全局數據共享(又叫:狀態管理)是為了解決組件之間數據共享的問題;全局數據共享方案:VueX、Redux、MobX等;二、小程序全局數據共享方案使用mobx-miniprogram配合mobx-miniprogram-bindings實現全局數…

生成模型 | DDPM -> Imrpoved DDPM -> DDIM

DDPM: Denoising Diffusion Probabilistic Models 采樣過程中的迭代計算為: xt?11αt(xt?1?αt1?αˉ?θ(xt,t))β~tzx_{t-1} \frac{1}{\sqrt{\alpha_t}}(x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}}}\epsilon_{\theta}(x_t, t)) \sqrt{\tilde{\beta…

Linux驅動之DMA(三)

目錄一、驅動內容1. 核心結構體解析2. 關鍵模塊解析3. 驅動初始化流程4. 關鍵寄存器操作5. 典型工作流程6. 代碼特點7. 重要函數列表8. 使用示例二、驅動中DMA的使用1. DMA通道初始化(imx_uart_dma_init)2. DMA發送流程(imx_uart_dma_tx&…

MongoDB 分片集群把非分片集合轉成分片集合

記得關注一下博主,博主每天都會更新IT技術,讓你有意想不到的小收獲哦^_^ 文章目錄*記得關注一下博主,博主每天都會更新IT技術,讓你有意想不到的小收獲哦^_^*一、MongDB集群啟停止1、MonogoDB分片集群服務啟動順序(三臺主機都要操作…

mybatis過渡到mybatis-plus過程中需要注意的地方

將 MyBatis 升級為 MyBatis-Plus(簡稱 MP)是一個平滑過渡的過程,因為 MP 是 MyBatis 的增強工具(而非替代),但仍有一些關鍵注意事項需要關注,以確保升級后功能兼容且能充分利用 MP 的特性&#…

openEuler系統中如何將docker安裝在指定目錄

在 openEuler 中,Docker 的默認數據存儲目錄為 /var/lib/docker(程序文件通常安裝在系統默認路徑,一般無需修改)。若需將 Docker 數據(鏡像、容器、卷等)存儲到指定目錄,可通過修改 Docker 配置…

2.4 我國金融市場的監管體制

1、國務院金融發展委員會職責 2、中國人民銀行職責

PHP - 實例屬性訪問與靜態方法調用的性能差異解析

觀察到了一個看似矛盾的現象:實例屬性訪問更快,但靜態方法調用更快。這實際上是兩種不同的操作,下面我將詳細解釋其中的原理和差異。1. 實例屬性訪問為什么快訪問機制class MyClass {public $instanceProp 1; }$obj new MyClass(); $value …

音視頻面試題集錦第 31 期

音視頻面試題集錦第 31 期: 1、I 幀、P 幀和 B 幀的概念及區別?2、視頻編碼中的碼率控制技術有哪些?3、音頻采樣參數有哪些?4、RTMP 和 HLS 協議各有什么特點?如何選擇?5、WebRTC 中的 ICE、STUN、TURN 各…

企業視頻庫管理高效策略

內容概要本文全面探討企業視頻庫管理的高效策略,旨在幫助組織優化視頻資源處理。首先,我們將介紹企業視頻庫管理的基本概念和核心價值。接著,深入分析智能分類核心技術如何通過AI算法實現視頻自動歸類。之后,闡述云集成實現路徑&a…

WebSocket和跨域問題

WebSocket 特點 WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議。簡單來說,它就像是在客戶端和服務器之間建立了一條"專用通道",雙方可以隨時主動發送消息給對方,而不需要像HTTP那樣總是由客戶端發起請求。 同一時間、雙向…

微服務-19.什么是網關

一.網關曾經我們的項目是單體項目,前端只需要請求8080端口,就可以獲取所有需要的數據和服務并進行渲染。但是拆分成微服務后,會面臨幾大問題:1.但是現在我們將該單體項目拆分成了微服務項目,每個項目都有自己獨立的端口…

從字節碼層面剖析以太坊智能合約創建原理

1. 引言 閱讀完本文之后,將能理解一下字節碼含義: 608060405260405160893803806089833981016040819052601e916025565b600055603d565b600060208284031215603657600080fd5b5051919050565b603f80604a6000396000f3fe6080604052600080fdfea2646970667358221…

typora無需激活版及最新激活版方法!雙擊安裝就能用

介紹 Typora 是一款Markdown編輯器,支持實時預覽,所見即所得。跨平臺,支持Windows、macOS、Linux。適合寫作、筆記、技術文檔等。本教程將提供合法安全的安裝方案,并解決常見問題,助你高效完成部署! 直接…

基于Java、GeoTools與PostGIS的對跖點求解研究

目錄 前言 一、對跖點簡介 1、地理學定義 2、人生哲學含義 二、對跖點求解 1、Java求解 2、Geotools求解 3、PostGIS求解 4、三種計算方法的對比 5、Leaflet展示對跖點 三、總結 前言 在地理信息系統(GIS)領域,對跖點(A…

Linux-函數的使用-編寫監控腳本

Linux-函數的使用-編寫監控腳本前言一、監控cpu二、采集內存的使用信息三、采集磁盤和分區的使用信息四、顯示進程的信息前言 編寫監控腳本實現以下功能 監控cpu,內存,磁盤,進程等信息,每隔5分鐘記錄這些信息到日志文件里perform…

Authelia:開源雙因素認證與單點登錄解決方案

項目標題與描述 Authelia是一個開源的認證和授權服務器,專注于為應用程序提供雙因素認證(2FA)和單點登錄(SSO)功能。通過Web門戶,Authelia能夠作為身份和訪問管理(IAM)系統&#xff…

Apache Ozone 介紹與部署使用(最新版2.0.0)

目錄 一、軟件介紹 二、軟件架構 Ozone Manager(OM) Storage Container Manager(SCM) Containers Datanodes Storage Containers Recon Recon 和 Ozone Manager Recon 和 Storage Container Manager 三、安裝部署 準備…

Review --- Linux

Review — Linux Linux 是一種開源的類 Unix 操作系統內核,廣泛應用于服務器、嵌入式設備和個人計算機中。其核心特點是開源、穩定、安全和高度的可定制性。對于大學畢業生而言,掌握 Linux 的基本操作和原理是進入 IT 行業的重要技能之一。 Linux 的基本…