2012-03-27 12 views
5

クラスにメンバ変数を追加すると、確実にヒープ上のインスタンスのメモリフットプリントが向上しますが、クラスのメソッドはどうですか?Javaクラスにメソッドを追加すると、インスタンスのメモリ使用量が増えますか?

たとえば、クラスが1つのStringBuilderで構成されていても、そのStringBuilderを操作するために数十のメソッドを追加し続けると、そのクラスの各インスタンスは、

ありがとうございます!

+0

皆さん、ありがとうございました。 – Syndog

答えて

12

いいえ、メソッドを追加してもオブジェクトのフットプリントは増加せず、コンパイルされたコードのフットプリントのみが増加します。換言すれば、インスタンス毎のメモリコストはゼロである。

4

短い答えはいいえ、ヒープにある各オブジェクトにメモリを追加しません。発生する唯一のことは、クラスが最初にロードされるときです。このメソッドもロードされます。

+1

まあ、この回答は少し控えめです。 Oracle Hotspot VMは、メソッドが何回か呼び出されると、バイトコードをネイティブ・コードにコンパイルします。この時点で、動的メソッド・インライン化も実行されます。つまり、メソッドを追加すると、他のことが起こります。これは*インスタンス*ではなく*クラス*のコストだということだけです。 –

2

これはVM固有ですが、すべてのユーザーが使用するOracle Hotspot VMでは、インスタンスのサイズには影響しません。

関連する問題