400-650-7353

精品課程

堆和棧的區(qū)別 堆和棧有什么區(qū)別?

發(fā)布: Java培訓 發(fā)布時間:2021-08-26 14:17:04

推薦答案
品牌型號:聯(lián)想 YOGA 14c/系統(tǒng)版本:windows7

一、空間分配不同:

1、堆區(qū)(heap)— 由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。

2、棧區(qū)(stack)— 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。

二、分配空間不同:

1.、Java的堆是一個運行時數(shù)據(jù)區(qū),類的對象從堆中分配空間。這些對象通過new等指令建立,通過垃圾回收器來銷毀。

2 、棧中主要存放一些基本數(shù)據(jù)類型的變量(byte,short,int,long,float,double,boolean,char)和對象的引用。

三、緩存方式不同:

1、堆是存放在二級緩存中,生命周期由虛擬機的垃圾回收算法來決定。所以,調(diào)用這些對象的速度相對來得低一些。

2、棧使用的是一級緩存,通常被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放。

四、數(shù)據(jù)結(jié)構(gòu)不同:

1、堆的數(shù)據(jù)結(jié)構(gòu)可以被看成是一棵樹,如堆排序。

2、棧是一種先進后出的數(shù)據(jù)結(jié)構(gòu)。

(推薦課程:Java基礎(chǔ)技術(shù)詳解)

其它答案
冰闊落2020-06-22 18:56:36

一、申請后系統(tǒng)的響應

棧:只要棧的剩余空間大于所申請空間,系統(tǒng)將為程序提供內(nèi)存,否則將報異常提示棧溢出。

堆:首先應該知道操作系統(tǒng)有一個記錄空閑內(nèi)存地址的鏈表,當系統(tǒng)收到程序的申請時,會遍歷該鏈表,尋找第一個空間大于所申請空間的堆結(jié)點,然后將該結(jié)點從空閑結(jié)點鏈表中刪除,并將該結(jié)點的空間分配給程序。

二、申請效率的比較

棧:由系統(tǒng)自動分配,速度較快。但程序員是無法控制的。

堆:由new分配的內(nèi)存,一般速度比較慢,而且容易產(chǎn)生內(nèi)存碎片,不過用起來最方便。

三、堆和棧中的存儲內(nèi)容

棧:在函數(shù)調(diào)用時,第一個進棧的是主函數(shù)中后的下一條指令(函數(shù)調(diào)用語句的下一條可 執(zhí)行語句)的地址,然后是函數(shù)的各個參數(shù),在大多數(shù)的C編譯器中,參數(shù)是由右往左入棧 的,然后是函數(shù)中的局部變量。

堆:一般是在堆的頭部用一個字節(jié)存放堆的大小。堆中的具體內(nèi)容由程序員安排。


中公旗下IT培訓品牌

  • 中公教育品牌

     中公教育是一家中國領(lǐng)先的全品類職業(yè)教育機構(gòu),提供超過100個品類的綜合職業(yè)就業(yè)培訓服務。公司在全國超過1000個直營網(wǎng)點展開經(jīng)營,深度覆蓋300多個地級市,并正在快速向數(shù)千個縣城和高校擴張。

  • 完善就業(yè)體系

    通過階段性授課機制,和每階段的定期考核,先讓學員能夠?qū)W會所學內(nèi)容,才能找打合適工作。最后一個階段為就業(yè)課程,從技術(shù)和面試兩個方面加深就業(yè)能力,并且還有不定期的雙選會供大家選擇。

  • 全程面授+實戰(zhàn)技術(shù)

    線下課程全程是師資面對面教學,不會存在上課只對著大屏幕上課的情況,有問題都可以在課上得到解答。并且優(yōu)就業(yè)通過自主研發(fā)大綱和學習路線,并且定期更新課程所學技術(shù),讓大家所學技術(shù)不落伍。

中公優(yōu)就業(yè)專業(yè)職業(yè)規(guī)劃老師

為您詳細答疑解惑,更能領(lǐng)取免費課程

相關(guān)問題

更多課程

專業(yè)課程老師將第一時間為您解答

立即答疑
修改
優(yōu)就業(yè):ujiuye

關(guān)注中公優(yōu)就業(yè)官方微信

  • 關(guān)注微信回復關(guān)鍵詞“大禮包”,領(lǐng)80G學習資料