日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM:堆与栈的比较

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM:堆与栈的比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

堆(heap)與棧(stack)

??? 堆和棧是程序運行的關鍵,很有必要它他們的關系說清楚。

? ? 在java中,Main函數就是棧的起始點,也是程序的起始點。程序要運行總是有一個起點的(程序執行的入口)。

概括: ??

?1 ?棧是運行時的單位 ,?而堆是存儲的單元

?2? 棧解決程序的運行問題,即程序如何執行,或者說如何處理數據,

? ? 堆解決的是數據存儲的問題,即數據怎么放,放在哪兒

java中一個線程就會相應有一個線程棧與之對應,這點很容易理解,因為不同的線程執行邏輯有所不同,因此需要一個獨立的線程棧。

而堆則是所有線程共享的。

? ?

?疑問一:為什么要把堆和棧區分出來呢?棧中不是也可以存儲數據嗎?

???? 1. 從軟件設計的角度看,棧代表了處理邏輯,而堆代表了數據這樣分開,使得處理邏輯更為清晰。分而治之的思想。

? ? ? ? 這種隔離、模塊化的思想在軟件設計的方方面面都有體現。

???? 2.堆與棧的分離,使得堆中的內容可以被多個棧共享(也可以理解為多個線程訪問同一個對象)。

? ? ? ? 好處: ?a.提供了一種有效的數據交互方式(如:共享內存)

? ? ?? ? ? ? ? ?b.堆中的共享常量和緩存可以被所有棧訪問,節省了空間。

???? 3. 棧因為運行時的需要,比如保存系統運行的上下文,需要進行地址段的劃分。

? ? ? ? 由于棧只能向上增長,因此就會限制住棧存儲內容的能力

? ? ? ? 而堆不同,堆中的對象是可以根據需要動態增長的

? ? ? ? 因此棧和堆的拆分使得動態增長成為可能,相應棧中只需記錄堆中的一個地址即可。

???? 4.?面向對象就是堆和棧的完美結合。

? ? ? ? 其實,面向對象方式的程序與以前結構化的程序在執行上沒有任何區別。

? ? ? ? 但是,面向對象的引入,使得對待問題的思考方式發生了改變,而更接近于自然方式的思考。

? ? ? ? 當我們把對象拆開,你會發現,對象的屬性其實就是數據,存放在堆中;

? ? ?? 而對象的行為(方法),就是運行邏輯,放在棧中。

? ? ? ? 我們在編寫對象的時候,其實就是編寫了數據結構,也編寫了處理數據的邏輯。不得不承認,面向對象的設計,確實很美。

?疑問二:??堆中存什么?棧中存什么?

? ? ? 1. 棧存儲的信息都是跟當前線程(或程序)相關的信息(局部變量(局部變量表)、程序運行狀態(操作數棧)、方法(動態連接)、方法返回值(方法返回地址))等,

? ? ? ? ?棧中存的是基本數據類型和堆中對象的引用。一個對象的大小是不可估計的,或者說是可以動態變化的,但是

? ? ? ? ?在棧中,一個對象只對應了一個4byte的引用(堆棧分離的好處)。

? ? ?2. 堆只負責存儲對象信息。

?疑問三:? 為什么不把基本類型放堆中呢?

? ? ?1. 其占用的空間一般是1~8個字節---需要空間比較少

? ? ?2.而且因為是基本類型,所以不會出現動態增長的情況---長度固定,因此棧中存儲就夠了,如果把它存在堆中是沒有什么意義的(還會浪費空間,后面說明??)。

總結

以上是生活随笔為你收集整理的JVM:堆与栈的比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。