首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實例化機制深度解析

     編輯:Java 相關知識

實例化是將類模板轉化為具體對象的過程。本文深入剖析 Java 對象創建、引用機制、內存佈局、垃圾回收等核心機制。

實例化全過程

// 1. 聲明引用變量(棧幀局部變量表)
User user;

// 2. new 關鍵字觸發實例化
user = new User("Alice", 25);

// 3. JVM 執行步驟:
//    a. 類加載檢查(符號引用解析為直接引用)
//    b. 堆內存分配(指針碰撞/空閒列表 + TLAB)
//    c. 零值初始化(字段默認值)
//    d. 設置對象頭(哈希碼、GC 信息、鎖狀態、類元數據指針)
//    e. 執行構造器(字段顯式初始化、代碼塊、構造器體)
//    f. 返回引用賦值給變量

引用 vs 指針

特性Java 引用C/C++ 指針
算術運算不支持支持
類型安全強類型檢查可強轉任意類型
內存地址暴露不直接暴露直接操作地址
賦值語義傳遞句柄(共享對象)拷貝地址值

對象內存佈局

+------------------+
|   Object Header  |  <- Mark Word (哈希/鎖/GC年齡) + Klass Pointer (類元數據)
+------------------+
|   Instance Data  |  <- 字段數據(按聲明順序/緊湊排列,父類字段在前)
+------------------+
|   Padding        |  <- 對齊填充(8字節倍數)
+------------------+

垃圾回收機制

  • 可達性分析: 從 GC Roots(棧局部變量、靜態字段、常量、JNI 引用等)出發,不可達對象可回收
  • 代際假設: 年輕代(Eden + Survivor)、老年代,分代收集
  • 主動觸發: System.gc() / Runtime.getRuntime().gc() 僅為建議,不保證執行
  • 引用類型: 強/軟/弱/虛引用,控制對象生命週期靈活度

對象作為屬性


class Order {
    User buyer;      // 僅存儲引用(句柄),不複製 User 對象
    List items; // 引用集合對象
}

優勢:避免數據冗余、支撐共享引用、構建對象圖。注意:需防範循環引用導致內存洩漏(需弱引用或手動斷開)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved