![](/img/trans.png)
[英]Do Static Methods and Fields take up memory in an instance of the class they are defined in?
[英]Do methods in class instances take a place in memory?
當我有這樣的課程時:
class Test {
private int _id = 0 ; // 4 bytes
private int _age = 0 ; // 4 bytes
}
我確信它的每個實例在內存中消耗超過8個字節,因為它有2個整數。
但是方法怎么樣? 如果我有一個擁有一百萬個方法的類,以及它的兩個實例,這些方法會占用內存的兩倍嗎?
它是如何工作的?
謝謝。
不可以。方法只在內存1中出現一次。 它們不會因每個實例而異 ,因此它們不需要基於每個實例進行存儲 。
Java中的對象基本上由一些固定大小的“內務處理”(指向類型信息的指針,包括vtable),可能與GC相關的位(思考標記和掃描),有關實例的監視器的信息等 - 然后是領域。
1這有點簡化。 可能有各種表示形式,例如字節碼,本機代碼等 - 但這與單獨的實例無關。
具有相同類的兩個實例不會復制方法代碼所需的空間量。 也就是說,這些方法駐留在內存中的一個位置,然后該類的每個實例都有一個指向內存中該位置的指針。 這是因為否則會浪費內存。 無論類的哪個實例調用它,每個方法需要執行的代碼都是相同的,因此復制它是沒有意義的。
但是為了執行像instance.method()這樣的方法,該方法的本地副本將在每個實例的堆棧中進行,其中實例將在堆中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.