堆內存(堆存儲空間)會在Java運行時分配給對象(Object)或者JRE的類。只要咱們建立了一個對象,那麼在堆中確定會分配一塊存儲空間給這個對象。而咱們熟知的Java垃圾回收就是在堆存儲空間上進行的,用以釋放那些沒有任何引用指向自身的對象。任何在堆中分配的對象都有全局訪問權限,並且能夠從應用的任何地方被引用。堆內存用於存放由new建立的對象和數組。 2、Java 棧存儲空間 Java 棧存儲空間用來供線程執行時使用。棧空間中包含特別的變量如:短生命週期和指向其餘在堆中對象的引用。這裏棧存儲空間知足後進先出的順序。當一個函數被調用時,會在棧中分配一塊新的存儲空間,用來存放函數的基本數據(【Java心得總結一】Java基本類型和包裝類型解析)以及在函數中對其它對象的引用。一旦函數執行結束,存儲空間就會被釋放供下一個函數使用。在函數中定義的一些基本類型的變量和對象的引用變量都是在函數的棧內存中分配。java
Memory.java數組
public class Memory { public static void main(String[] args) { // Line 1 int i=1; // Line 2 Object obj = new Object(); // Line 3 Memory mem = new Memory(); // Line 4 mem.foo(obj); // Line 5 } // Line 9 private void foo(Object param) { // Line 6 String str = param.toString(); //// Line 7 System.out.println(str); } // Line 8 }
下圖展現了堆棧存儲空間是如何存儲基本類型、對象以及指向變量的引用 函數
程序執行過程:線程