天才教育網合作機構>

全國千鋒IT培訓

歡迎您!
朋友圈

400-850-8622

全國統(tǒng)一學習專線 9:00-21:00

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

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

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

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

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

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

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

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