數(shù)據(jù)結(jié)構(gòu)中的Stack是一組數(shù)據(jù)的存取方式,后進(jìn)先出 LIFO ?Last In First out
主要有以下幾類操作:

push 在頂層加入數(shù)據(jù);pop 返回并移除頂層數(shù)據(jù);top 返回頂層數(shù)據(jù);isempty 返回一個布爾值,標(biāo)識當(dāng)前stack是否為空stack
call stack 指的是程序代碼實現(xiàn)中函數(shù)、方法之間相互調(diào)用的順序形成的調(diào)用棧。
本質(zhì)是內(nèi)存中存放成員變量 局部變量等基本數(shù)據(jù)類型的空間,堆內(nèi)存一般存放的是引用類型,在棧內(nèi)存中存在一個變量,其值記錄著該堆內(nèi)存的地址作為引用,指向該實例,方便后續(xù)調(diào)用、處理。每一個線程一個stack,而進(jìn)程則是共享一個heap,stack是線程獨占的,heap是進(jìn)程內(nèi)所有線程共享的。一個線程創(chuàng)建時,其stack是固定的,一旦程序執(zhí)行過程中,其stack數(shù)據(jù)超過該棧大小,發(fā)生stack overflow,而heap堆大小則是不固定的,可以申請。但由于一個線程執(zhí)行完畢后,相應(yīng)的stack數(shù)據(jù)會被釋放,對應(yīng)的所指向的堆內(nèi)存數(shù)據(jù)可能不存在引用,即被稱之為垃圾,將在垃圾回收環(huán)節(jié)被回收,如果不回收則可能會存在內(nèi)存泄露的可能性。
jvm里面說一個線程對應(yīng)一個虛擬機(jī)棧,而堆是針對的整個虛擬機(jī)的運行過程中的
stack內(nèi)變量的分配速度會比heap快很多,只需要修改sp寄存器,heap內(nèi)分配需要調(diào)用malloc(malloc調(diào)用heap分配實現(xiàn)的,而不是heap分配調(diào)用malloc。)。stack的尋址也會比heap快,通過sp/fp寄存器間接尋址。