java虛擬機(六)局部變量表

局部變量表示一組變量值儲存空間,用於存放方法參數和方法內部定義的局部變量。

其最小單位爲solt。一個slot可以存放一個boolean,byte,char,short,int,float,reference,returnAddress,的數據類型。但虛擬機規範確有沒有明確規定一個solt佔有的空間大小。此外 long,double佔用兩個solt。

因爲連續佔用兩個solt,卻不用擔心數據安全問題。無論是不是原子操作都沒問題。他們是線程的私有數據。

怎麼使用局部變量表?

通過索引,索引從0開始。但需要注意,0索引是用來傳遞該方法所屬對象實例的引用,這也是爲什麼在方法中通過this可以獲取方法所屬的對象。那麼分配其他索引就要1開始了。

爲了儘可能減少棧幀的空間。slot是可重複使用的。

舉個例子:

{
     int a=1;
}

int b=1;

我們知道a的作用域只在括號範圍內。當出去了這個範圍,slot就可以交給其他變量,這個例子就交給了b。但slot的複用會引發垃圾收集行爲。

來看個例子

可以看到,當過了placeholder的作用域之後,仍然沒有被回收。  但這裏也要注意一下,system.gc()  只是來告訴虛擬機 你可以來回收了。  像你媽喊你去吃飯,你要先寫完這道題。(如所有線程都要跑到最近的安全點一樣)

解決的辦法就是 代碼看多了。你會發現有些代碼會在後面  手動賦值爲null。  

這是一條推薦的編碼規則。

最後要注意,局部變量表並沒有像類變量 有準備階段。  類變量不需要賦初值,但方法變量就必須要賦值,否則不能通過編譯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章