NO変数を含むが100バイトのメソッドコードがあり、20バイトの属性しか持たないJavaクラスがあるとします。メソッド集約型Javaオブジェクトのメモリフットプリントはどのくらいですか?
このクラスから1000個のオブジェクトをインスタンス化します。
私は100,000Kのメモリを消費しましたか?または100K +(20バイト* 1000)だけですか?それとも全く別のもの?
NO変数を含むが100バイトのメソッドコードがあり、20バイトの属性しか持たないJavaクラスがあるとします。メソッド集約型Javaオブジェクトのメモリフットプリントはどのくらいですか?
このクラスから1000個のオブジェクトをインスタンス化します。
私は100,000Kのメモリを消費しましたか?または100K +(20バイト* 1000)だけですか?それとも全く別のもの?
クラス自体をロードするためのメモリフットプリントは、コードサイズにほぼ対応しますが、コードはクラスの各インスタンスごとに複製されません。インスタンスは、インスタンス・アトリビュートと同じだけ多くのメモリーと、オブジェクト・インスタンス自体を管理するためのオーバーヘッドを必要とします。
オブジェクトの「可変」部分だけをインスタンス化しているので、属性(およびここでは数バイトのオーバーヘッドがあると思われます)がインスタンス化されます。後者の推測は正しいものです。
ここでは、Javaでオブジェクトのメモリ使用量を決定する一般的なガイドです:私は、メソッドの定義から発生し、メモリ使用量が一定量になると思われる http://www.javamex.com/tutorials/memory/object_memory_usage.shtml
がクラスである場合には、(おそらくpermgenスペースに置きますインスタンスの数に比例するのではなく、ロードされます)。
jvisualvm(JDK内)で添付して、表示内容を教えてください。
あなたはそれを実行し、あなたがLinux上であればタスクマネージャ/トップをチェックすることができます.... – Dani