首頁  >  文章  >  Java  >  關於java中堆疊記憶體與堆疊記憶體的詳細分析

關於java中堆疊記憶體與堆疊記憶體的詳細分析

王林
王林轉載
2019-12-26 17:40:252258瀏覽

關於java中堆疊記憶體與堆疊記憶體的詳細分析

一、概述​​

在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中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除