Java類和對象的內存分配

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

一、每次建立對象時,都須要進行加載建立2個操做:
spa

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

② 在堆中建立新對象對象

二、棧、堆、方法區的存儲blog

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

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

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

三、方法的調用機制變量

每次調用方法,伴隨着「方法入棧」操做,也就是棧中爲該方法分配了一塊空間,用於保存該方法中涉及到的變量引用

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

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

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

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
}
  • 基本類型調用方法內存分配

相關文章
相關標籤/搜索