一、概述
在Java中,記憶體分為兩種,一種是堆疊內存,另一種就是堆疊記憶體。
二、堆記憶體
1、什麼是堆記憶體?
堆記憶體是Java記憶體中的一種,它的作用是用來儲存Java中的物件和陣列,當我們new一個物件或是建立一個陣列的時候,就會在堆疊記憶體中開闢一段空間給它,用於存放。
2、堆記憶體的特色是什麼?
第一點:堆其實可以類似的看做是管道,或者說是平時去排隊買票的的情況差不多,所以堆內存的特點就是:先進先出,後進後出,也就是你先排隊,好,你先買票。
第二點:堆可以動態地分配記憶體大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配記憶體的,但缺點是,由於要在運行時動態分配記憶體,存取速度較慢。
3、new物件在堆中如何分配?
由Java虛擬機器的自動垃圾回收器來管理。
免費影片教學分享:java影片教學
三、堆疊記憶體
1、什麼是堆疊記憶體
堆疊記憶體是Java的另一種內存,主要是用來執行程式用的,例如:基本型別的變數和物件的參考變數。
2、堆疊記憶體的特色
第一點:堆疊記憶體就好像一個礦泉水瓶,像裡面放入東西,那麼先放入的沉入底部,所以它的特徵是:先進後出,後進先出
第二點:存取速度比堆疊要快,僅次於暫存器,堆疊資料可以共享,但缺點是,存在堆疊中的資料大小與生存期必須是確定的,缺乏彈性
3、堆疊記憶體分配機制
#堆疊記憶體可以稱為一級緩存,由垃圾回收器自動回收
4、資料共享
範例:
int a = 3; int b = 3;
第一步處理:
1.編譯器先處理int a = 3;
2.建立變數a的引用
3.在堆疊中查找是否有3這個值
4.沒有找到,將3存放,a指向3
#第二步處理:
1.處理b=3
2.建立變數b的參考
3.找到,直接賦值
第三步驟改變:
#接下來
a = 4;
同上方法
a的值改變,a指向4,b的值是不會改變的。
PS:如果是兩個物件的話,那就不一樣了,物件指向的是同一個引用,一個發生改變,另一個也會改變。
四、堆疊和堆疊的差異
JVM是基於堆疊的虛擬機,JVM為每個新建立的執行緒都分配一個堆疊。也就是說,對一個Java程式來說,它的運作就是透過對堆疊的操作來完成的。堆疊以幀為單位保存執行緒的狀態。 JVM對堆疊只進行兩種操作:以幀為單位的壓棧和出棧操作。
差異點:
1.堆記憶體用來存放由new建立的物件和陣列。
2.堆疊記憶體用來存放方法或局部變數等。
3.堆是先進先出,後進後出。
4.堆疊是後進先出,先進後出。
相同點:
#1.都是屬於Java記憶體的一種。
2.系統都會自動去回收它,但是對於堆記憶體一般開發人員會自動回收它。
更多相關文章教學分享:java零基礎入門
#以上是關於java中堆疊記憶體與堆疊記憶體的詳細分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!