2016-11-15 6 views
1

私はこの質問に対する答えを知りたいと思います。クラスをインスタンス化するときに、クラス定義のメソッド数がメモリ消費に影響しますか?

私は現在、自分のチェスエンジンをJavaで書いています(私はC++が高速であることを知っています)。私はたくさんの例を作成する必要があります。たとえば、あるボードステートから別のボードステートへのパスを表すMoveOrderオブジェクトです。私は、クラス定義にかなりのインスタンスメソッドを持たせるのが便利です。これらのオブジェクトが膨大な数になると、プログラムの速度に影響しますか?私は代わりに、同じ機能を扱う静的メソッドを含むユーティリティクラスを作成する必要がありますか?

+0

「これらのオブジェクトの膨大な数」と言えば、それはどういう意味ですか?百人?何千?数十万? –

+0

私は何百万人もの人がいると思う。 – Someguy

+0

いいえ、それはできません。メソッドはクラスに属し、クラスのインスタンスには属しません。 StringまたはIntegerのメソッドの数を数えましたか?すべてのプログラムはそれらの多くを使用します。 –

答えて

1

メソッドの数は、単一のオブジェクトのメモリ消費に影響しません。各オブジェクトには、そのクラスへのアドレスを含むヘッダと、クラスメソッドのすべてではなく、フィールドのみが含まれています。

0

これは、インスタンス変数によって使用される合計サイズであり、クラスのインスタンスによって占められる領域に影響を与えるメソッドの数ではありません。

0

番号は1回だけ存在します。 C++では、メソッドテーブルについて聞いたことがあります。それはオブジェクトテーブルごとのメソッドと呼ばれていません。別の方法でそれを行うことは、一度コンパイルされると、メソッドはそれ以上変更されないので、メモリの浪費になります。

あなたがについてa Method (Oracle)を読めば、それが(強調鉱山)言う:

はに関する情報、およびクラスまたはインタフェース上の単一のメソッドへのアクセスを提供します。

とは対照的に

オブジェクト上の単一のメソッド、約情報、およびアクセスを提供します。」

しかし、多くのオブジェクトはメモリを割り当てます。十分なRAMがない場合は、ディスクにスワップされる可能性があります。そのためオブジェクトの数がパフォーマンスに影響しますが、その方法によるものではありません。

関連する問題