導航:首頁 > 編程語言 > 堆棧java

堆棧java

發布時間:2023-12-05 20:27:49

① 如何理解java虛擬機棧

堆是堆(heap),棧是棧(stack),堆棧是棧。

棧中分配的是基本類型和自定義對象的引用。

堆中分配的是對象,也就是new出來的東西。 被所有線程共享。

方法區/靜態區 存放的是類信息和static變數、常量。 被所有線程共享。

也可以這么理解:堆是用來存放對象的,棧是用來運行程序的。

堆:java的垃圾回收器會自動的回收這些不用的數據。缺點是由於要動態的分配內存,存儲效率會比較的慢。

棧:棧的優勢是存取效率比較快,僅次於寄存器,棧數據可以共享。但缺點是棧中的數據大小和生存期的固定的,缺乏靈活性。

一般每個方法的調用都會獨立有一個棧來保存對象的引用變數,在方法返回後,棧會清空,當在一段代碼塊定義一個變數時,Java就在棧中為這個變數分配內存空間,當超過變數的作用域後,Java會自動釋放掉為該變數所分配的內存空間,該內存空間可以立即被另作他用。

以32位地址操作系統為例,一個進程可擁有的虛擬內存地址范圍為0-2^32。分為兩部分,一部分留給kernel使用(kernel virtual memory),剩下的是進程本身使用, 即圖中的process virtual memory。

一個程序本質上都是由bss段、data段、text段三個組成的

bss段(Block Started by Symbol segment)通常是指用來存放程序中未初始化的全局變數的一塊內存區域,一般在初始化時bss 段部分將會清零。bss段屬於靜態內存分配,即程序一開始就將其清零了。

在C語言之類的程序編譯完成之後,已初始化的全局變數保存在.data 段中,未初始化的全局變數保存在.bss 段中。

text和data段都在可執行文件中(在嵌入式系統里一般是固化在鏡像文件中),由系統從可執行文件中載入;而bss段不在可執行文件中,由系統初始化。

閱讀全文

與堆棧java相關的資料

熱點內容
phantomjs指定埠 瀏覽:448
extjs獲取當前第幾行 瀏覽:518
怎樣導出sql資料庫文件格式 瀏覽:157
u盤系統文件格式 瀏覽:376
javafind數組 瀏覽:41
t2080升級cpu 瀏覽:190
微信文件倒出來哪裡找到 瀏覽:722
單元格刪除文件夾內容 瀏覽:170
word2003如何修改作者 瀏覽:217
默認資料庫埠 瀏覽:537
sql資料庫mdb在哪裡 瀏覽:819
win10創作者更新了什麼好處 瀏覽:994
linuxtunelp 瀏覽:665
centos打開zip文件格式 瀏覽:995
java文明5 瀏覽:86
ipad輸密碼沒反應 瀏覽:916
一號文件中提出了哪些要求 瀏覽:527
scl用什麼語言編程 瀏覽:962
系統前台進行的程序 瀏覽:270
刀塔機尾座怎麼移動怎麼編程 瀏覽:16

友情鏈接