読者です 読者をやめる 読者になる 読者になる

Shut the fuck up and write some code

グダグダ言わずにコードを書きたいブログ

FL2におけるGetFreePlayerMemoryの挙動

去年の夏に書いたエントリ
http://d.hatena.ne.jp/verytired/20070711/1184131432
ずっとずっとガベージコレクションってうまく動いてないって思ってたんですけど。それはGetFreePlayerMemoryで得られる数値が、null突っ込もうが、delete使おうが、unloadmovieしようが、ずっと変わらなかったから。

今日職場にて「某案件で外注が作ったFL2アプリではメモリ解放してるっぽい」という話を聞いて再調査。JPGを読み込み、解放を繰り返すサンプルを作り、GetFreePlayerMemoryの挙動を見る。やっぱりGetFreePlayerMemoryの値は変わらない。

ここでひとつの疑問。もしかしてGetFreePlayerMemoryでは、TotalMemoryから使用メモリ分だけ減算されるけど、ガベージコレクションから復帰したメモリは加算してないのでは?
http://livedocs.adobe.com/flashlite/2_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts_wEcute&file=00000334.html

Flash Lite が現在使用できるヒープメモリの量をキロバイトで返します。

この「現在」ってのが怪しい・・・。もしかしたらバグ不具合報告例があるかも?と思い再度検索してみた。

そして出てきたのがこれ。
http://www.adobe.com/jp/devnet/devices/articles/memory_management_06.html

("GetFreePlayerMemory")コマンドは割り当てることのできる最大メモリを返します。ガベージコレクタによって解放されたメモリは含まれません。

やっぱりそうだったか・・・一目でわかるかそんなの!どっかに書いておいておくれよあどべ・・・。

ということで、ガベージコレクションは動いている。けど、どれだけメモリが解放されたか確認する方法はないっぽい。うーん分かりにくい。メモリが一杯になりそうなら、ガベージが早く回るように一度処理を落とすようにするなど考慮しないとダメか。しかし現在使えるメモリが把握できないってのはキツイよね。設計しにくいよ!

しっかし完全に見落としてたなあ。反省。おかしいと思ったところは継続的に調査しないとダメですね。