加班使我快樂!
點贊再看,養成習慣。
堆(Stack):
- 實際的對象被存儲在堆內存中
- 創建的對象放在堆內存中,堆內存中的對象不會隨着方法的結束而銷燬,只有當一個對象沒有任何引用變量引用它時,系統的垃圾回收器纔會在合適的時候回收它
- 堆內存中的東西都有一個地址值。
- 堆內存中的數據都有默認值:
-
-
整數 默認爲0
-
浮點數 默認爲0.0
-
字符 默認爲 '\u0000'
-
布爾 默認爲false
-
引用類型 默認爲null
-
棧(Heap):
- 對象的引用變量放在棧內存中
- 在所有方法中定義的局部變量放在棧內存中,隨着方法的執行結束,這個方法的內存棧自然銷燬
- 局部變量:方法的參數,或者是方法{}內部的變量
- 方法的運行一定要在棧當中運行
舉個例子:
一個數組的內存圖
方法區內保存的最主要的內容就是方法信息:方法名字、參數、返回值等等
將方法區main中的信息加載到棧內存,方法進棧。
變量array放在內存中。new出來的數組int[3]放在堆中,默認值爲0,地址值假設爲0x666,這個地址值會被賦值到左邊變量中。實際上變量中存放的就是地址值,我們可以根據這個地址值在堆內存中找到數組在堆內存中的位置。
這裏我改變了數組中的值,array[1]=10,根據array找到array數組在堆內存中的位置,找到array[1],重新賦值爲10.
兩個數組的內存圖(同理)
兩個引用指向同一個數組的內存圖
拓展:
-
寄存器(pc Register):與CPU相關
-
本地方法棧(Native Method Stack):與操作系統有關
-
方法區(Method Area):存儲.class相關信息,包含方法的信息
-
棧內存
-
堆內存