GC恐怖症

以前の日記(id:ABA:20040326#p2)に述べたように、私は昔のJavaVMの頃の思い出を引きずっているために、D言語でも必要以上にGCを避けたコードを書こうとしてしまっている。

  • GC付きの言語での大規模開発(id:yaneurao:20040413#p1)

それはどちらも、ゲーム中のフレーム落ちして困る部分ではnewを一切行なっていないからである。(詳しく確認したわけでないので間違ってたらスミマセン) つまり、(ゲームのメイン部分を実行中は)GCは一切呼び出していないし、GCに頼ってもいない。

すくなくとも本人はそのつもりでコード書いてます。

それでは、GCを呼び出すとまともな速度は出ないかというとそうでもない。この規模ならば、newをある程度使って、かつ、毎フレームfullCollectを行なったとしてもそれは1ms以下だろう。

でしょうねえ。なので私のコードはあらゆるオブジェクトを過剰にプールしているともいえる。頭では分かっているんだけど、どうしてもオブジェクトを1フレーム内に大量に生成することに生理的な恐怖感みたいなものを感じてしまう。敵が爆発した時のパーティクルを動的に確保とか...怖くてできない。

オブジェクトをプールすることの欠点といえば、余分にメモリを消費してしまうことだけど、私の作っているゲームの規模だと、その量もたかがしれているので、そういった意味では別にプールしててもいいんだけどね。ただ、ちょっとしたオブジェクト、たとえばVectorとかを生成することすら今は躊躇しているので、そういったところは徐々に改めようと思う。コードの見易さにも効いてくるしね。