サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

System.pauseForGCIfCollectionImminent()メソッド

ID: FN1110007 Platform: All Version: CS5/ActionScript 3.0 Runtime: Flash Player 11/AIR 3.0

Systemクラス
パッケージ flash.system
継承 System → Object
pauseForGCIfCollectionImminent()メソッド
文法 public static function pauseForGCIfCollectionImminent(imminence:Number = 0.75):void
概要 [静的] ガベージコレクションに、しきい値となる切迫度を与える。ガベージコレクションの切迫度がしきい値を超えると、収集を1段階終える。
引数

imminence:Number − 0から1までの数値。値が大きいほど切迫度は高い。負の数値は0.25、1.0以上は1.0に、NaNはデフォルト値の0.75とみなされる。

戻り値 なし。

説明
Flash Player 9以降のActionScript 3.0では、要らなくなったオブジェクトなどが占めていたメモリを「ガベージコレクション」という仕組みにより開放します[*1]。しかし、ガベージコレクションは負荷の高い処理です。そこで、Flash Player 11およびAIR 3.0には、ガベージコレクションの実行を促したり抑えたりする静的メソッドSystem.pauseForGCIfCollectionImminent()が備わりました。

ガベージコレクションは、Flash Playerのルートから順にオブジェクトの参照をたどって印(マーク)をつけていきます。そして、すべてのオブジェクトを確かめた後、印のないオブジェクトが占めていたメモリを開放します[*2]。使われているメモリやオブジェクトの数が多いと、ガベージコレクションが費やす時間も増します。そのため、アプリケーションの実行をできるだけ妨げないように、処理は小分けして行われます。

それでも、とくにメモリを開放するときには、アプリケーションを止めてしまうこともあります。すると、アニメーションやサウンドが途切れてしまうかもしれません。System.pauseForGCIfCollectionImminent()メソッドは、ガベージコレクションの実行を促したり抑えたりできます。たとえば、ゲームの真っ最中は実行を抑えて滑らかなアニメーションに徹し、レベルをクリアしたときつぎに備えてメモリを開放すれば、ユーザーは快適なプレイが楽しめるでしょう。

System.pauseForGCIfCollectionImminent()メソッドに渡す引数の切迫度(imminence)はしきい値です。それはガベージコレクションの単なる頻度ではありません。行われる処理がすぐに終わるなら、実行しても差し障りはないでしょう。コレクションに時間がかかりそうなときは、メモリの空き具合によります。空きメモリが少なければ切迫度は高まります。

System.pauseForGCIfCollectionImminent()メソッドに低い切迫度を渡すと、ガベージコレクションは比較的活発に実行され、多くのコレクションが行われます。切迫度を高めると、コレクションがすぐに済む場合でないかぎりアプリケーションを止めません。

空きメモリが増えるかどうかは、切迫度の値とは別です。問題は参照を失ったオブジェクトがどれくらいあるかだからです。大きなデータや大量のオブジェクトの参照を消した後なら、切迫度を低めることによりガベージコレクションが促され、メモリも開放されやすくなります。

[*1]「ガーベジコレクション」(garbage collection)とは、オブジェクトへの参照を確かめ、すべての参照がなくなるとメモリを自動的に解放する仕組みです。なお、拙著『ActionScript 3.0による三次元表現ガイドブック』Column 01「ガベージコレクションと弱い参照」(PDFプレビュー公開)p.024-025およびF-site「DisplayObjectインスタンスの削除とガベージコレクション」をご参照ください。

[*2] ガベージコレクションの「マーク・アンド・スイープ」と呼ばれる実行方法です。詳しくは、Wikipedia「マーク・アンド・スイープ」、Tanablog「Flash Playerのガーベジコレクタについて」、akihiro kamijo「Flash Player 9のガーベジコレクション」をお読みください。

参考
[ActionScript 3.0 Reference for the Adobe Flash Platform] > [System]の「pauseForGCIfCollectionImminent() method」の項
prsync「Providing Hints to the Garbage Collector in AIR 3


作成者: 野中文雄
作成日: 2011年10月18日


Copyright © 2001-2011 Fumio Nonaka.  All rights reserved.