3

ここではちょっとした好奇心があります。

基本的に、プリミティブデータメンバーが少ないオブジェクトがある場合、それは少量のメモリを消費し、作成にそれほど時間はかかりません。ただし、そのオブジェクトに関連付けられているメソッドがたくさんある場合はどうなりますか?オブジェクトのインスタンス化では、それらを考慮に入れる必要がありますか?

たとえば、呼び出すことができる(ここに途方もなく大きな数を挿入する)多数の異なるメソッドを持つクラスがあるとします。メソッドがない場合よりも、JVMがそのクラスのインスタンスを作成するのに時間がかかりますか?

4

3 に答える 3

6

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

したがって、オブジェクトに含まれるメソッドの数は関係ありません。2千または2千です。オブジェクトの作成にはまったく同じ時間がかかります。

ところで、同じことがメソッド呼び出しにも当てはまります。オブジェクトの数が少ないオブジェクトと比較して、メソッドの数が多いオブジェクトのメソッドを呼び出す場合、パフォーマンスに影響はありません。

も参照してください

于 2012-02-29T23:01:15.360 に答える
2

いいえ、測定可能または重要なパフォーマンスヒットはないと思います。私はノーと言い、あなたや他の誰かが反対に意味のあるデータを持って戻ってくることを拒否します。

オブジェクトがそれほど大きい場合は、リファクタリングするときが来たと思います。

于 2012-02-29T23:01:44.450 に答える
2

Javaについて話すことはできませんが、C ++などでは、非仮想メソッドをグローバル関数として格納でき(適切な名前マングリングを使用)、インスタンス化時に余分なスペースを必要としません。仮想メソッドはVMTに入力する必要があります。これは、コンパイル時に構築でき、インスタンス化時にオブジェクトに単一のポインターを格納できます。

ですから、多くのメソッドにヒットは見られません。

于 2012-02-29T23:01:52.833 に答える