java裡的堆記憶體於棧記憶體的區別

2021-09-08 13:52:38 字數 593 閱讀 3718

這個區別對於我們來說並不大,這是記憶體分配的兩種方法。一般**邏輯,簡單變數,結構體都是放入棧中,而物件,以及被裝箱的資料是放入堆中的。

簡單來說,棧就是乙個很長的棧(資料結構中的棧,如果不理解可以當做是像線一樣的一長串資料)。裡面存著各種邏輯,以及像整形,浮點型等資料,根據棧先進先出的原則,**會一條條被執行,執行**中包含著棧中可以存放的資料。但資料量過大的時候,存入棧中會明顯影響效能。所以,我們將大量的資料存入堆中,之後,棧中放堆的位址。這樣,在進行資料呼叫的時候,可以通過位址找到對應資料。

對於我們來說,沒有什麼特別的方法可以進行堆和棧之間的轉換,比如說結構體就是值型別,只能放在棧中,除非你把它轉換為類,否則它永遠都在棧中。反之亦然。

而簡單資料的話,在c#中可以進行乙個強制型別轉換來進行裝箱。

比如說:

int a = 1;

object i = (object)a;

把乙個整數值型別的變數裝箱進一成為乙個引用型別,這樣做明顯會增加程式的執行時間,減低效能。而且在拆箱的時候,必須注意它原來的資料型別。否則可能出現拆箱失敗的情況。由此可見,對於記憶體的管理,我們還是直接交給clr比較好。強行的裝箱拆箱,只會增加程式執行時間,減低系統效能,降低**可讀性。

堆記憶體 棧記憶體 靜態儲存區

參考部落格 一般說到記憶體,指的是計算機的隨機儲存器ram,程式都是在這裡面執行。1.棧記憶體 棧記憶體由作業系統自動分配和釋放,速度快,使用方便,但程式設計師無法控制。若分配失敗,則提示棧溢位錯誤。注意,const區域性變數也儲存在棧中,向著記憶體位址減小的方向增長。棧記憶體儲存的是程式執行過程中...

靜態記憶體,棧記憶體和動態分配的記憶體 堆記憶體 的區別

1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的...

記憶體中堆區和棧區的區別

從下面五個方面說一下記憶體中堆和棧的區別 1 管理方式 對於棧來講,是由編譯器自動管理,無需我們手工控制 對於堆來說,釋放工作由程式設計師控制,容易產生memory leak。2 申請大小 能從棧獲得的空間較小,堆是向高位址擴充套件的資料結構,是不連續的記憶體區域。堆的大小受限於計算機系統中有效的虛...