簡體   English   中英

類實例中的方法是否在內存中占有一席之地?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM