天才教育網(wǎng)合作機(jī)構(gòu)>

全國(guó)千鋒IT培訓(xùn)

歡迎您!
朋友圈

400-850-8622

全國(guó)統(tǒng)一學(xué)習(xí)專線 9:00-21:00

位置:學(xué)校資訊 > java大數(shù)據(jù)棧和堆的區(qū)別,java中堆和棧的區(qū)別!!!!

java大數(shù)據(jù)棧和堆的區(qū)別,java中堆和棧的區(qū)別!!!!

日期:2021-11-09 10:11:14     瀏覽:295    來源:全國(guó)千鋒IT培訓(xùn)
核心提示:java大數(shù)據(jù)棧和堆的區(qū)別,搞 Java 最重要的是什么?毫不夸張地說,掌握和了解java中堆和棧的區(qū)別!!!!??,基本就能走遍天下都不怕了!1.java中堆和棧的區(qū)別!!!!堆: 是大家共有的空間,分全局堆和局部堆。全局堆就是所有

java大數(shù)據(jù)棧和堆的區(qū)別,搞 Java 最重要的是什么?毫不夸張地說,掌握和了解java中堆和棧的區(qū)別!!!!??,基本就能走遍天下都不怕了!

1.java中堆和棧的區(qū)別!!!!

堆: 是大家共有的空間,分全局堆和局部堆。全局堆就是所有沒有分配的空間,局部堆就是用戶分配的空間。堆在操作系統(tǒng)對(duì)進(jìn)程初始化的時(shí)候分配,運(yùn)行過程中也可以向系統(tǒng)要額外的堆,但是記得用完了要還給操作系統(tǒng),要不然就是內(nèi)存泄漏。棧:是個(gè)線程獨(dú)有的,保存其運(yùn)行狀態(tài)和局部自動(dòng)變量的。棧在線程開始的時(shí)候初始化,每個(gè)線程的?;ハ嗒?dú)立,因此,棧是 thread safe的。每個(gè)C ++對(duì)象的數(shù)據(jù)成員也存在在棧中,每個(gè)函數(shù)都有自己的棧,棧被用來在函數(shù)之間傳遞參數(shù)。操作系統(tǒng)在切換線程的時(shí)候會(huì)自動(dòng)的切換棧,就是切換 SS/ESP寄存器。??臻g不需要在高級(jí)語言里面顯式的分配和釋放。1、棧區(qū)(stack)- 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。2、堆區(qū)(heap) - 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。3、全局區(qū)(靜態(tài)區(qū))(static)-,全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。 - 程序結(jié)束后有系統(tǒng)釋放 4、文字常量區(qū)-常量字符串就是放在這里的。 程序結(jié)束后由系統(tǒng)釋放5、程序代碼區(qū)-存放函數(shù)體的二進(jìn)制代碼。2.1申請(qǐng)方式stack:由系統(tǒng)自動(dòng)分配。例如,聲明在函數(shù)中一個(gè)局部變量 int b; 系統(tǒng)自動(dòng)在棧中為b開辟空間heap:需要程序員自己申請(qǐng),并指明大小,在c中malloc函數(shù)如p1 = (char *)malloc(10);在C++中用new運(yùn)算符如p2 = (char *)malloc(10);但是注意p1、p2本身是在棧中的。全局變量是在所有函數(shù)之外聲明的變量,局部變量則是在函數(shù)體內(nèi)聲明的變量。全局變量放在內(nèi)存的全程數(shù)據(jù)區(qū),局部變量在棧上申請(qǐng)。全局?jǐn)?shù)據(jù)區(qū)分為兩部分全局?jǐn)?shù)據(jù)區(qū)和靜態(tài)數(shù)據(jù)區(qū),靜態(tài)數(shù)據(jù)區(qū)專門存放static變量。static的全局變量只在該文件范圍內(nèi)可見,不能用extern聲明為外部變量。 編譯器會(huì)自動(dòng)初始化全局變量。堆和棧的區(qū)別可以用如下的比喻來看出: 使用棧就象我們?nèi)ワ堭^里吃飯,只管點(diǎn)菜(發(fā)出申請(qǐng))、付錢、和吃(使用),吃飽了就走,不必理會(huì)切菜、洗菜等準(zhǔn)備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。 使用堆就象是自己動(dòng)手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。

雖說掌握和了解了java中堆和棧的區(qū)別!!!!??,能走遍天下,但也要不斷去學(xué)習(xí)新的知識(shí),更多的Java知識(shí),請(qǐng)聯(lián)系客服獲取。

本文由 全國(guó)千鋒IT培訓(xùn) 整理發(fā)布。更多培訓(xùn)課程,學(xué)習(xí)資訊,課程優(yōu)惠,課程開班,學(xué)校地址等學(xué)校信息,可以留下你的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢電話:400-850-8622