2011-08-12 55 views
2

分配給類的成員函數,我發現我的一個類似的問題:如何內存是用Java

「被分配一次或對象的每一個實例類的成員函數代碼的記憶?」,可以發現here

但是,那裏的答案只談到了C/C++的情況。任何人都可以告訴我這個問題的答案,如果我使用Java?

回答

0

這不是一個簡單的答案。

代碼在加載類時加載一次,但代碼可以內聯到其他類的方法中(並且每次加載其他類時都加載),並且類可以被垃圾收集並隨後重新加載,所以代碼再次加載。

分配的許多方面也將取決於VM的實現。

0

答案與您的其他問題基本相同,只是它更具動態性。對於最流行的Sun/Oracle VM:可執行代碼由JIT(即時編譯器)編譯器按需編譯到代碼緩存中,並由Hotspot編譯器進行進一步優化(例如內聯)。

當方法被稱爲方法指針時,方法變量的引用和值將作爲上下文放在堆棧上,然後執行代碼緩存中的代碼。

1

是類的成員函數的代碼的存儲器分配一次或每隔 實例

據每個對象類每一次分配,而不是一次對象。準確地說,每個類/類加載器對分配一次。您可以將其視爲由編譯器分配,只要您瞭解編譯器以包含JIT或HotSpot所做的任何操作即可。