2009-12-01 4 views
6

NO変数を含むが100バイトのメソッドコードがあり、20バイトの属性しか持たないJavaクラスがあるとします。メソッド集約型Javaオブジェクトのメモリフットプリントはどのくらいですか?

このクラスから1000個のオブジェクトをインスタンス化します。

私は100,000Kのメモリを消費しましたか?または100K +(20バイト* 1000)だけですか?それとも全く別のもの?

+1

あなたはそれを実行し、あなたがLinux上であればタスクマネージャ/トップをチェックすることができます.... – Dani

答えて

10

クラス自体をロードするためのメモリフットプリントは、コードサイズにほぼ対応しますが、コードはクラスの各インスタンスごとに複製されません。インスタンスは、インスタンス・アトリビュートと同じだけ多くのメモリーと、オブジェクト・インスタンス自体を管理するためのオーバーヘッドを必要とします。

0

オブジェクトの「可変」部分だけをインスタンス化しているので、属性(およびここでは数バイトのオーバーヘッドがあると思われます)がインスタンス化されます。後者の推測は正しいものです。

2

ここでは、Javaでオブジェクトのメモリ使用量を決定する一般的なガイドです:私は、メソッドの定義から発生し、メモリ使用量が一定量になると思われる http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

がクラスである場合には、(おそらくpermgenスペースに置きますインスタンスの数に比例するのではなく、ロードされます)。

0

jvisualvm(JDK内)で添付して、表示内容を教えてください。

関連する問題