JVM棧的資料共享

2021-08-22 08:45:27 字數 549 閱讀 3815

棧有乙個很重要的特殊性

就是存在棧中的資料可以共享。

假設 同時定義: int a=3; int b=3;

編譯器先處理 int a = 3;

首先,它會在棧中建立乙個變數為 a 的引用

然後,查詢棧中是否有 3 這個值

如果,沒找到,就將 3 存放進來,然後將 a 指向 3

接著處理 int b = 3;

在建立完 b 的引用變數後

因為在棧中已經有 3 這個值,便將 b 直接指向 3

這樣,就出現了 a 與 b 同時均指向 3 的情況

這時,如果再令 a=4;

那麼編譯器會重新搜尋棧中是否有 4 值

如果沒有,則將4 存放進來,並令 a 指向 4

如果已經有了,則直接將 a 指向這個位址

因此 a值的改變不會影響到 b 的值

兩個物件的引用,同時指向乙個物件

修改了這個物件的內部狀態,會影響到另乙個物件引用變數

a 的修改,並不會影響到 b

它是由編譯器完成的,它有利於節省空間

jvm堆記憶體的資料共享

以前沒學jvm的時候,老師總是講在堆記憶體中的資料是共享的,多個執行緒可以使用堆中的同乙個資料,於是才會有加鎖的操作。其實,堆裡的資料就是是共享的 那麼tlab是怎麼一回事呢?首先物件分配時,現在當前執行緒中的tlab中檢視空間是否有多餘,如果有,則分配到此執行緒中的tlab中。1.tlab是在堆記...

JVM棧記憶體

乙個方法相當於乙個棧幀,下面進行結構和過程解析 說白了就是存放方法內部定義的區域性變數 8大基本資料型別 string引用型別 物件引用8大基本資料型別 int short byte double char boolean float long string引用型別 string是個final類和八...

JVM 之棧結構

jvm中三塊主要的記憶體就是 棧記憶體,堆記憶體,方法區記憶體 方法區最先有資料 方法區中存放的是 片段,存放class位元組碼 棧記憶體 方法呼叫的時候,該方法需要的記憶體空間在棧中分配,並且呼叫時就是壓棧。方法不呼叫是不會再棧中分配空間的,方法執行結束後,該方法所需要的空間就會釋放,此時發生彈棧...