1. 程式人生 > >為什麼會有堆記憶體和棧記憶體之分

為什麼會有堆記憶體和棧記憶體之分

當一個方法執行時,每個方法都會建立自己的記憶體棧,在這個方法內定義的變數將會逐個放入這塊棧記憶體裡,隨著方法的執行結束,這個方法的記憶體棧也將自然銷燬。因此,所有在方法中定義的區域性變數都是放在棧記憶體中的;在程式中建立一個物件時,這個物件將被儲存到執行時資料區中,以便反覆利用(因為物件的建立成本通常較大),這個執行時資料區就是堆記憶體。堆記憶體中的物件不會隨方法的結束而銷燬,即使方法結束後,這個物件不會隨方法的結束而銷燬,即使方法結束後,這個物件還可能被另一個引用變數所引用(在方法的引數傳遞時很常見),此時這個物件依然不會被銷燬。只有當一個物件沒有任何引用變數引用它時,系統的垃圾回收器才會在合適的時候回收它