Java程序運行內存機制

Java程序運行內存機制

棧內存包留調用方法、變量的區域,堆內存是new對象的區域,方法區爲保存class文件的區域。java

程序剛開始時,先加載類文件相應的數據到方法區,而後就從main()方法開始執行。執行main()方法,main()方法入棧,執行phone one = new Phone(),首先Phone one聲明一個變量併入棧,而後new Phone()在堆內存申請一塊空間,此時,申請的堆內存中保留着類文件中的那些變量;而後,申請區域中的方法則是一快存儲着方法地址的區域。而後堆中申請的區域的地址就被賦予給棧內存中聲明的變量進行初始化。而後就繼續執行one.brand = "蘋果";one.price = "8838.0";one.color = "黑色";對聲明變量所指向的堆內存中的一些變量進行初始化(更新)。當調用one.call("喬布斯");時,就會去尋找變量one中的方法區域去找相應的方法的地址而後就去方法區裏去尋找相應的方法,而後就將one.call()方法進行入棧,並執行。當執行完了後one.call()就從棧空間中彈出棧。而後就繼續執行one.sendMessage(),原理相似。當運行到main()方法的結尾大括號時,main函數就執行完成,main函數也彈出棧,程序就執行完成。函數

下圖爲當聲明一個對象時的調用狀況:code

下圖爲聲明2個對象時的調用狀況:對象

當聲明第二個對象時,與前面說的同樣,會在先在棧內存中進行變量的入棧,而後new Phone()會在堆內存內申請一塊內存。方法區仍是跟原來同樣。blog

下圖是將一個對象的值賦給另外一個對象的調用狀況:內存

當將兩個對象的值賦值給其餘對象時,會把該對象在棧內存中申請的內存的地址賦值給新對象,新對象也同時指向該區域,且一個對象對該區域的內容進行更改時,另外一個對象也會察覺到。class

相關文章
相關標籤/搜索