クラスにメンバ変数を追加すると、確実にヒープ上のインスタンスのメモリフットプリントが向上しますが、クラスのメソッドはどうですか?Javaクラスにメソッドを追加すると、インスタンスのメモリ使用量が増えますか?
たとえば、クラスが1つのStringBuilderで構成されていても、そのStringBuilderを操作するために数十のメソッドを追加し続けると、そのクラスの各インスタンスは、
ありがとうございます!
クラスにメンバ変数を追加すると、確実にヒープ上のインスタンスのメモリフットプリントが向上しますが、クラスのメソッドはどうですか?Javaクラスにメソッドを追加すると、インスタンスのメモリ使用量が増えますか?
たとえば、クラスが1つのStringBuilderで構成されていても、そのStringBuilderを操作するために数十のメソッドを追加し続けると、そのクラスの各インスタンスは、
ありがとうございます!
いいえ、メソッドを追加してもオブジェクトのフットプリントは増加せず、コンパイルされたコードのフットプリントのみが増加します。換言すれば、インスタンス毎のメモリコストはゼロである。
短い答えはいいえ、ヒープにある各オブジェクトにメモリを追加しません。発生する唯一のことは、クラスが最初にロードされるときです。このメソッドもロードされます。
まあ、この回答は少し控えめです。 Oracle Hotspot VMは、メソッドが何回か呼び出されると、バイトコードをネイティブ・コードにコンパイルします。この時点で、動的メソッド・インライン化も実行されます。つまり、メソッドを追加すると、他のことが起こります。これは*インスタンス*ではなく*クラス*のコストだということだけです。 –
これはVM固有ですが、すべてのユーザーが使用するOracle Hotspot VMでは、インスタンスのサイズには影響しません。
皆さん、ありがとうございました。 – Syndog