2012-02-29 9 views
3

ほんの少しアイドルな好奇心がここにあります。オブジェクトに多数のメソッドがある場合、オブジェクトのインスタンス化時にパフォーマンスが低下しますか?

基本的に、いくつかのプリミティブデータメンバーしか持たないオブジェクトを使用すると、少量のメモリを占有し、作成に時間がかかりません。しかし、そのオブジェクトに関連するメソッドがたくさんあるとどうなりますか?オブジェクトインスタンス化は、それらをすべて考慮に入れなければなりませんか?

たとえば、私が呼び出すことのできる別個のメソッドの数(ここで不当に大きな数値を挿入する)を持つクラスがあるとしましょう。 JVMはメソッドを持たない場合よりも、そのクラスのインスタンスを作成するのに時間がかかりますか?

答えて

6

いいえ、メソッド付きのClassは、個別のメモリ位置(つまりPermGen)に1回格納され、特定のクラスの各オブジェクトはその型(Class)への参照を1つだけ持ちます。

したがって、オブジェクトのメソッドの数は2つまたは2千です。つまり、オブジェクトの作成にはまったく同じ時間がかかります。

BTW同じことがメソッド呼び出しにも当てはまります。ほんのわずかしかないオブジェクトと比較してオブジェクトのメソッドを呼び出すと、パフォーマンスが低下します。

も参照してください

+0

甘い、ありがとう。私は実際にそれが反対であると想像していました。 – CodeBunny

2

いいえ、私はパフォーマンスはそれが測定可能であるか、あなたには関係よヒットがあります信じていません。私はいいえと言い、あなたや他の誰かに反して意味のあるデータに戻ってもらうことには反対します。

オブジェクトがの場合、が大きい場合は、リファクタリングするときだと思います。

2

私はJavaについては話せませんが、C++などでは非仮想メソッドはグローバル関数として格納することができ、インスタンス化時に余分なスペースは必要ありません。仮想メソッドは、おそらくコンパイル時に構築され、インスタンス化時にオブジェクトに格納される単一のポインタで構築されるVMTに埋め込まれなければならない。

だから、私は大量の方法ではヒットしません。

関連する問題