2017-06-05 59 views
-1

我想了解一個java接口將佔用多少空間,二進制中的磁盤和每個實例化對象的基礎上。強制性的「每個JVM的實現可能是不同的」免責聲明,我更感興趣的不是100%的確切答案,而是理解如何處理的基本要素。Java界面需要多少空間(二進制/內存)?

如果我們假設一個簡單的接口(沒有靜態的最終變量,沒有默認的實現),那麼這個二進制會佔用多少空間?我假設需要存儲可讀的類名,以進行調試/反射,還可能存在一些唯一的類標識符?當實現此接口的對象被實例化時,接口將添加到對象的內存中表示中多少額外的開銷字節(如果有)?

+3

這不是一個非常有意義的問題,隨着類文件格式的改變和JVM實現的改變,隨着時間的推移,任何答案都會有所不同。它可能會在不同的平臺上有不同的答案。也許如果你解釋了「答案」會給你什麼以及知道爲什麼這很重要。當然,唯一的答案是「......多少額外字節的開銷......」是「它取決於」。 –

+2

這不是一個cop-out答案,它是*唯一有效答案*。 SO不僅僅關心今天回答一個人的問題,它還是一個長期的信息庫。關於當前最新Java的準確性可能與明天無關,並且今天可能與使用不同版本Java的其他人無關。 – Adrian

+1

閱讀JVM字節碼規範。 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html –

回答

1

java接口占用多少空間,包括二進制文件中的磁盤和每個實例化對象。

在磁盤上的二進制:
明確的答案:.class文件的文件大小。
簡短回答:這取決於,如Jim Garrison said
龍答:這取決於:包的名稱,接口名稱的長度,方法號,方法名的長度,參數的數量,參數類型,參數名稱的長度,返回類型的類型,是否調試的長度信息包括,字節碼,...以及更多的版本...

以每個實例化對象的基礎上:
無。