更新時間:2020-08-19 11:37:44 來源:動力節點 瀏覽2121次
可能很多初學java的小伙伴對Java的堆棧內存還不是很了解,為了幫助大家更好的學習,動力節點java培訓機構的小編就來告訴大家什么是Java的堆棧內存。
一、Java中變量在內存中的分配
1. 類變量(static修飾的變量):在程序加載時系統就為它在堆中開辟了內存,堆中的內存地址存放于棧以便高速訪問。靜態變量的生命周期—一直持續到整個“系統”關閉
2. 實例變量:當你使用java關鍵字new的時候,系統在堆中開辟并不一定是連續的空間分配給變量(比如說類實例),然后根據零散的堆內存地址,通過哈希算法換算為一長串數字以表征這個變量在堆中的“物理位置”。實例變量的生命周期–當實例變量的引用丟失后,將被GC(垃圾回收器)列如可回收“名單”中,但并不馬上就釋放堆中內存
3. 局部變量:局部變量,由聲明在某方法,或某代碼段里(比如for循環),執行到它的時候在堆中開辟內存,當局變量一旦脫離作用域,內存立即釋放
二、堆內存
什么是堆內存?
堆內存是java內存中的一種,它的作用是用于存儲java中的對象和數組,當我們new一個對象或者創建一個數組的時候,就會在堆內存中開辟一段空間給它,用于存放。
堆內存的特點是什么?
第一點:堆其實可以類似的看做是管道,或者說是平時去排隊買票的情況差不多,所以堆內存的特點就是:先進先出,后進后出,也就是你先排隊好,你先買票。
第二點:堆可以動態地分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的,但缺點是,由于要在運行時動態分配內存,存取速度較慢。
new對象在堆中如何分配?
由Java虛擬機的自動垃圾回收器來管理。
棧內存
棧內存是Java的另一種內存,主要是用來執行程序用的,比如:基本類型的變量和對象的引用變量
棧內存的特點
第一點:棧內存就好像一個礦泉水瓶,往里面放入東西,那馬先放入的沉入底部,所以它的特點是:先進后出,后進先出。
第二點:存取速度比堆要快,僅次于寄存器,棧數據可以共享,但缺點是,存在棧中的數據大小與生存必須是確定的,缺乏靈活性。
棧內存分配機制
棧內存可以稱為一級緩存,由垃圾回收器自動回收
數據共享
棧和堆的區別
JVM是基于堆棧的虛擬機,JVM為新創建的線程都分配一個堆棧,也就是說,對于一個Java程序來說,它的運行就是通過對堆棧的操作來完成的。堆棧以幀為單位保存線程的狀態。JVM對堆棧只進行兩種操作:以幀為單位的壓棧和出棧操作。
差異:
1. 堆內存用來存放由new創建的對象和數組
2. 棧內存用來存放方法或者局部變量等
3. 堆是先進先出,后進后出
4. 棧是先進后出,后進先出
5. 共享性的不同:
(1)棧內存是線程私有的
(2)堆內存是所有線程共有的
(3)空間大小
(4)棧的空間大小遠遠小于堆的。
以上就是動力節點java培訓機構的小編針對“Java的堆棧內存詳解”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習