Java類和對象的內存分配


  • 類的加載時機:

1、創建對象

2、調用類的靜態成員

3、加載子類

  • 類在實例化后的內存分配

1、每次創建對象時,都需要進行加載創建2個操作:

① 先去判斷需要的類是否已經加載,如果已經加載了,則無需再加載,如果沒有加載,則需要通過類加載器加載類信息到方法區

② 在堆中創建新對象

2、棧、堆、方法區的存儲

棧:對象的引用、局部變量

堆:對象和全局變量(屬性)

方法區:類信息、屬性信息、方法信息

3、方法的調用機制

每次調用方法,伴隨着“方法入棧”操作,也就是棧中為該方法分配了一塊空間,用於保存該方法中涉及到的變量

每次方法調用結束,伴隨着“方法出棧”操作,也就是棧中分配的空間被釋放了

在類的方法調用過程中,首先判斷方法區是否存在該方法,存在則方法入棧,調用結束后出棧。

  • 對象在調用類方法時的內存分配

Java中方法傳遞參數是按值傳遞

如果是基本類型,則值 代表元素內容

如果是引用類型,則值 代表地址號

特殊情況

在調用的方法中對引用型變量形參重新實例化,改變的是地址,則不會影響實參,即傳值進去沒用重新實例化為新地址。

class Test{
      public void method(Person persion){
        person=new Person();
        person.name = "Zane";
        System.out.println(p.name);    // 輸出為Zane
    }
}
class Person{
    String name;
}
public static void main(String[] args){
    Test t = new Test();
    Person p = new Person();
    p.name = "Mort";
    t.method(p);
    System.out.println(p.name);    // 輸出為Mort
}
  • 基本類型調用方法內存分配

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM