ObjectPool

2012年04月04日

主に、JavaVMにおけるガーベージコレクタ(GC)の、メモリフラグメンテーション→GCのザ・ワールド発動(Full GC)問題に関して、情報がインターネット中に散乱しているー。
やっぱり、GCは、悪なんだ!?
って、一概に言えないから難しぃ。

はい。

で、既にデザインパターンが存在していることに、感動をした。
曰く、「Object Pool」デザインパターン。

Object Poolデザインパターンの概要については、このページが簡潔で良いと思う。
Object Pool - Strategic Choice
(http://d.hatena.ne.jp/asakichy/20090406/1238985837)


Object Poolは、いろんなことが目的になっているけれども、
「・オブジェクトを使い終えたときにそれを廃棄せずに再利用することで、オブジェクト再生成を避けることができる。」
この点が、今回の問題(メモリフラグメンテーション)を解消するのに、うってつけ。

さて、で、その実装はーーー。


Oh,,,no........
自分で考えろってかっ!



それにしても、"Object Pool ActionScript"で検索すると、英語のサイトが山ほど出てくる。
そして、言っていることに差が無い。
みんな同じ思いだったのかー。

GCってのは、罪な奴だ。


って、adobeのサイトに、オブジェクト プールのサンプルあったあった
オブジェクトプーリング
(http://help.adobe.com/ja_JP/as3/mobile/WS948100b6829bd5a6-19cd3c2412513c24bce-8000.html)


これはこれで、面白い処理になっている。
getSprite()で、プールが無ければ拡張して、スプライトを戻す。
disposeSprite()で、プールに入れる(参照をさせる)。
参照をプールに残すことで、GCをだましているのねー。

disposeSprite()では、既に割り当てているプールに、渡されてきたSpriteを入れている。
という事は、あくまで参照をどこかに残すのが目的、とでも言うべきかー。

ところで、Vecter.<Sprite>のリアロケート( unshift() )のお値段(実行速度)は、いくらなんだろう?
C++でSTLを使っていると、コピーコンストラクタがやたら呼ばれてゴニャゴニャするのがトラウマだけに、気になる。

tk_gametk_game at 22:49│コメント(0)トラックバック(0)