2015-09-11 82 views
1

我正在學習jvm的內幕,我讀了this文章。雖然閱讀我有一個疑問,即 當局部變量堆棧被創建?如果地方在運行時創建的變量堆棧這個超級關鍵字指向實物或者,如果局部變量棧在編譯時創建的,這是如何,超關鍵字內部運作的?當局部變量堆棧被創建?

+0

虛擬地調用方法時虛擬地創建局部變量。然而,這些都是虛擬的,這可能意味着方法,甚至局部變量在代碼優化之後可能不存在,它完全是名義上的。 –

+3

@RealSkeptic'this'在字節碼中始終是堆棧中的第0個變量。另一方面,'super'只是''這個''已被投入使用父類的方法。 –

回答

2

當局部變量堆棧被創建?

javacjavac將本地變量分配給棧中的字節碼。這種分配是名義上的,實際機器中的實際分配可能會非常不同。

JIT已經優化了代碼之後,可以內聯局部變量和方法本身,在這種情況下,在理想情況下什麼都不會發生。

如果在運行時創建的局部變量堆棧將這個,超關鍵字指向實物

沒有super在運行時。只有當前對象可用,例如代表this的對象以及可以對其調用的方法。當你使用super時,你所指的是父類中的方法,而不是當前的方法。

或者如果在編譯時創建局部變量堆棧,這個超級關鍵字在內部是如何工作的?

super更改編譯器選擇調用的方法。一旦做出此選擇,將丟棄superthis之間的區別。

+0

謝謝彼得。 –