堆和棧老是會弄混,所以記錄一下,方便以後複習。
堆: 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似於鏈表。存放數據時是先進先出。堆則是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定(並不是一旦成爲孤兒對象就能被回收)。所以調用這些對象的速度要相對來得低一些。
我記得以前上課的時候老師說堆和棧一個是地址遞增,一個遞減,但是網上看到的資料說堆棧既可以遞增,最後從網上查閱到堆地址從低到高,棧地址從高到低。這是由於內存優化分配問題,在加載代碼的時候都是從低地址往高地址存放代碼,系統分配一個任務所用的內存是一定的,這個任務所佔用的內存是包括棧的,想想看,如果佔是由低到高分配的你這個任務所用的內存就不是固定的值了。總的來說棧結構從高地址到低地址是爲了固定任務內存。