物理地址
堆的物理地址分配對對象是不連續(xù)的鲫竞。因此性能慢些。在GC的時(shí)候也要考慮到不連續(xù)的分配逼蒙,所以有各種算法从绘。比如,標(biāo)記-消除其做,復(fù)制顶考,標(biāo)記-壓縮,分代(即新生代使用復(fù)制算法妖泄,老年代使用標(biāo)記——壓縮)
棧使用的是數(shù)據(jù)結(jié)構(gòu)中的棧驹沿,先進(jìn)后出的原則,物理地址分配是連續(xù)的蹈胡。所以性能快渊季。
內(nèi)存分別
堆因?yàn)槭遣贿B續(xù)的,所以分配的內(nèi)存是在運(yùn)行期確認(rèn)的罚渐,因此大小不固定却汉。一般堆大小遠(yuǎn)遠(yuǎn)大于棧。
棧是連續(xù)的荷并,所以分配的內(nèi)存大小要在編譯期就確認(rèn)合砂,大小是固定的。
存放的內(nèi)容
堆存放的是對象的實(shí)例和數(shù)組源织。因此該區(qū)更關(guān)注的是數(shù)據(jù)的存儲
棧存放:局部變量翩伪,操作數(shù)棧,返回結(jié)果谈息。該區(qū)更關(guān)注的是程序方法的執(zhí)行缘屹。
PS:
- 靜態(tài)變量放在方法區(qū)
- 靜態(tài)的對象還是放在堆。
程序的可見度
堆對于整個(gè)應(yīng)用程序都是共享侠仇、可見的轻姿。
棧只對于線程是可見的。所以也是線程私有。他的生命周期和線程相同互亮。