3

プレイヤーの車に接触している車の数と、どの車が接触しているかを知る必要があるゲームを作成しています。私の計画は、 を作成しList、必要に応じて車を追加および削除することです。

これが私の質問です。私Carのクラスは作成するのに非常にコストがかかります (処理能力に関して)。車への参照を作成するのにどれくらいの費用がかかりますか? 私が話しているのはC ++ではポインターと呼ばれることを知っています。コードの例を次に示します。

Car newCar = new Car(); // expensive
Car carCopy = newCar.clone(); // expensive
Car referenceNewCar = newCar; // expensive?

referenceNewCarとメモリ内の同じ場所を指す必要がありnewCarますよね?したがって、何も初期化する必要はなく、言うことは;newCar.changeMemberVariableTo(1)と同じです。referenceNewCar.changeMemberVariableTo(1)どちらの方法でnewCarreferenceNewCar、メモリ内の同じ場所を指しているため、両方が影響を受けます。

完全に新しいCar. どのくらい速いですか?たとえば、新しい を作成するのに 3 秒かかる場合Car、同じ車への新しい参照を作成するのはほぼ瞬時に行われるでしょうか?

前もって感謝します。

4

1 に答える 1

2

ある変数から別の変数への参照のコピーは非常に安価です。intまたは値をコピーするのと同じくらい安価である可能性がありlongます(問題のJVMに関するいくつかのことによって異なります)。

取得できるのは、まったく同じ値を持つ 2 つの変数 (参照) だけです。その値は非常に小さく (ほとんどの実装では 4 バイトまたは 8 バイト)、通常、コピーするのにバイトをコピーする以上の労力は必要ありません。

(私は、一部のJVM はこれよりも少し賢いのではないかと密かに疑っています。ガベージ コレクションのために、一部の JVM は、特定のオブジェクトへの参照を持つ最も古い世代に関するフラグを更新する可能性があります。たとえば、それは実装によって異なりますが、とにかく私の記憶が間違っている可能性があります.)

于 2013-07-27T21:49:29.840 に答える