本文來源於翁舒航的博客,點擊即可跳轉原文觀看!!!(被轉載或者拷貝走的內容可能缺失圖片、視頻等原文的內容)
若網站將鏈接屏蔽,可直接拷貝原文鏈接到地址欄跳轉觀看,原文鏈接:https://www.cnblogs.com/wengshuhang/p/9862252.html
棧為什么效率比堆高
總結如下:
1、有寄存器直接對棧進行訪問(esp,ebp),而對堆訪問,只能是間接尋址。
也就是說,可以直接從地址取數據放至目標地址;使用堆時,第一步將分配的地址放到寄存器,然后取出這個地址的值,然后放到目標地址。
2、棧中數據cpu命中率更高,滿足局部性原理。
3、棧是編譯時系統自動分配空間,而堆是動態分配(運行時分配空間),所以棧的速度快。
4、棧是先進后出的隊列結構,比堆結構相對簡單,分配速度大於堆。
“堆”和“棧”並不是數據結構上的Heap跟Stack,而是程序運行中的不同內存空間。
那么這就簡單了,棧是程序啟動的時候,系統分好了給你的,你自己用,系統不干預。
堆是用的時候才向系統申請的,用完了還回去,這個申請和交還的過程開銷相對就比較大了。
棧與堆都是Java用來在Ram中存放數據的地方。
棧中主要存放一些基本類型的變量(,int, short, long, byte, float, double, boolean, char)。 存在棧中的數據可以共享。棧的優勢是,存取速度比堆要快,僅次於寄存器,棧數據可以共享。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。
堆是一個運行時數據區,類的(對象從中分配空間。由於要在運行時動態分配內存,存取速度較慢。 存在棧中的數據可以共享。
棧是編譯時分配空間,而堆是動態分配(運行時分配空間),所以棧的速度快
cpu有專門的寄存器(esp,ebp)來操作棧,堆都是使用間接尋址的。棧快點