JAVA 對象創建,方法調用的內存分析

原文鏈接:https://blog.csdn.net/qq_40534888/article/details/86561949

先放一張截圖

從main方法開始運行整個內存分析情況如下:

1、main方法在棧去分配內存空間。程序運行時,方法沒有被調用前,方法是沒有內存空間的,只有方法在被調用時,纔會進行壓棧動作,在棧去分配內存空間。

2、程序開始執行Person p1=new Person()創建person對象,main方法在main方法內部給p1變量分配內存空間,開始執行new運算符,會在堆區分配儲存空間,並且爲堆區的屬性初始化,接着調用Person(),Person的無參構造方法,會在棧區分配儲存空間(只用是方法都會在棧區分配儲存空間,構造方法也是方法),無參構造方法執行完畢都,構造方法會釋放空間。

3、接着執行‘’=‘’等號運算符,會將新創建的person對象的內存地址賦值給p1,p1儲存的值其實是對象在堆區的內存地址,指向堆區的對象。

4、接着p1調用showInfo()方法,會在棧區分配一塊內存給showInfo(),會打印剛纔創建對象的屬性值,因爲沒有爲對象賦值,所以會打印創建對象時系統爲屬性賦默認值。

5、接着創建第二個對象,Person p2=new Person();繼續執行上面創建對象的步驟,首先,main方法給p2分配內存空間,執行new運算符,在堆區分配存儲空間,並初始化,接着調用Person有參構造方法,爲Person類中屬性賦值,其中,“lisi”,“男”屬於字符串常量,直接存儲在fang方法區中的常量區中,會將這兩個常量的內存地址賦值給name和gender屬性,所以name和gender存儲的是常量值的內存地址。而age和height屬於基本值,所以這兩個屬性直接存儲的是值。

6.當p1=p2執行時,p2會第二次創建的對象的引用即地址賦值給p1.p1引用也將指向這個對象。

7.當p1調用showInfo()方法時,就會把lisi,男,20,180打印出來。

8.當方法執行完之後,會彈棧,釋放空間。

對象的創建和方法的調用內存空間基本就這樣。
————————————————
版權聲明:本文爲CSDN博主「di_wangace」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_40534888/article/details/86561949

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章