![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nekoyuki | Åê¹ÆNo.33072 投稿日時: 2007-4-20 13:59 |
半人前 ![]() ![]() 居住地: 大阪府 投稿: 48
使用環境:
![]() ![]() |
AS3.0 ガベージコレクションの対象について ちょっと実験してみました。
下記の様なコードです。
本体(?)である変数mcにnullを代入したはず なのですがまだ変数adrで値が参照出来てしまいます。 リファレンスのDisplayObjectContainer.removeChild () メソッドの一文によるとこう記述されています。 ガベージコレクターとは、Flash Player が未使用のメモリースペースを再割り当てする処理のことです。変数またはオブジェクトがアクティブに参照されなくなり、任意の場所に保存されていない場合、ガベージコレクターによってメモリー内が探索され、それらに対する参照が存在しなければメモリースペースを占有している変数またはオブジェクトが一掃されます。 つまりは変数adrにもnullを代入しなければガベージコレクションの対象にされないと言う事でしょうか? これでは無闇にDisplayObject系のインスタンスの参照をする変数を作ることは出来ないと言う訳で恐ろしくて夜も眠れません ![]() (今まで頻繁にmcの参照を使ってスクリプトを組んでいたので・・・) removeChildしたインスタンスが プロパティparentがnullになるだけで まるごと生存しており、 再び、addChildすると再利用出来てしまいます。 明示的に完全にインスタンスを消すことは不可能なのでしょうか? |
野中文雄 | Åê¹ÆNo.33074 投稿日時: 2007-4-20 14:27 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
![]() ![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について 「ガベージコレクション」というのは、そういう仕組みだと思います。
![]() 引用: nekoyukiさんは書きました: addChild()メソッドを呼出す前にすでにインスタンスは存在している訳ですから、removeChild()メソッドでインスタンスがなくなってしまったら整合性が取れません。 ![]() ディスプレイ(表示)リストへの追加は、ステージ上に表示する階層(ツリー)構造に加えるだけのことです。逆に、これまでできなかった別のインスタンス(DisplayObjectContainer)の子どもに移動するということも、この仕様により実現可能となりました。 引用: removeChildしたインスタンスが 必要のない参照(変数)を、すべて破棄すれば可能です。 引用: 明示的に完全にインスタンスを消すことは不可能なのでしょうか? |
nekoyuki | Åê¹ÆNo.33179 投稿日時: 2007-4-27 2:40 |
半人前 ![]() ![]() 居住地: 大阪府 投稿: 48
使用環境:
![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について 野中様
返信が遅れまして誠に申し訳ありません。 折角、ご教授頂いたのですが 未だ理解出来ていません。 自分なりにさらに実験を重ねているのですが どうしても解せないのです。
EnterFrame上でnewしまくるわけですが 何も変数で参照しないので ガベージコレクションの対象になるだろうと 期待したのですが結果は 描画もしていないのにも関わらず CPU利用率とPF使用量がガンガン上がって行きました。 ![]()
常にひとつ分のUltraHeavyMCしか生存しない事を期待しましが やはりCPU利用率とPF使用量がガンガン上がって行きました。 ![]() 本当にガベージコレクションの処理が行われるのかどうかも 疑心暗鬼になってしまいました。 ![]() もしかしたらネストしてるムービークリップにも nullを参照させなければいけないのだとしたら かなり管理が大変になると思われます・・。 AS3以前ではremoveMovieClipさえすれば ゴミが溜まっていくなんて事は起きなかったのですが 今回は見えない所でゴミがどんどん溜まっていきます。 コードを作る側にとってかなり恐ろしい事です。 この様なケースはどうしたら良いのでしょうか? |
野中文雄 | Åê¹ÆNo.33180 投稿日時: 2007-4-27 3:15 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
![]() ![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について removeEventListener()を実行しても、メモリは解放されませんか? だとしたら、メモリリークの可能性があると思います。
引用: nekoyukiさんは書きました: |
nekoyuki | Åê¹ÆNo.33192 投稿日時: 2007-4-28 16:24 |
半人前 ![]() ![]() 居住地: 大阪府 投稿: 48
使用環境:
![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について 引用:
野中文雄さんは書きました: removeEventListenerもそうですが この様に間隔を空けて実行すれば CPU利用率とPF使用量の上昇は見受けられませんでした。
しかしまだ不可解な事があります。 次のケースはaddChildとremoveChildを繰り返した場合なのですが addChild後CPU使用率とPF使用量が上昇します。 ですがその後removeChildして参照をnullにしたにも関わらず PF使用量が解消されず、そのまま上昇する一方です。 (CPU使用率は下がります)
ただUltraHeavyMCから複雑な入れ子のMCをやめた途端、 PF使用量の上昇は見受けられなくなりました。 その辺りが関連するのでしょうか? (単純にビットマップを置きまくるなど複雑な描画はOKみたいです) |
nekoyuki | Åê¹ÆNo.33207 投稿日時: 2007-4-30 18:21 |
半人前 ![]() ![]() 居住地: 大阪府 投稿: 48
使用環境:
![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について 原因ですがなんとなく解りました。
どうやらビットマップキャッシュが犯人の様です。 ビットマップキャッシュをやめた途端、 PF使用量の上昇が止まりました。 (scriptで記述するcacheAsBitmapも同様です) ただremoveChildをした時に全く開放されないのは 理解出来ません。 Public Alphaのバグなのでしょうか? (またはプレイヤーのバグ?) バグだとしたら CS3では直っていたらいいんですが・・・。 |
野中文雄 | Åê¹ÆNo.33209 投稿日時: 2007-5-1 10:56 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
![]() ![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について 「ガベージコレクションが起きるタイミング」は、システム(Flash Player)任せで、事前予測ができないというのはこの機能の欠点として挙げられています。
引用: nekoyukiさんは書きました: DisplayObjectContainer.removeChild()メソッドを呼出したら、タイミングのずれはともかく、ビットマップキャッシュも解放されるべきです。間もなく英語版のTrialはアップロードされるでしょうから、この問題は確認しておきたいですね。 引用: nekoyukiさんは書きました: |
nekoyuki | Åê¹ÆNo.33280 投稿日時: 2007-5-9 1:53 |
半人前 ![]() ![]() 居住地: 大阪府 投稿: 48
使用環境:
![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について ついにCS3の体験版が出ましたね!
![]() 早速解析してみます。 |
nekoyuki | Åê¹ÆNo.33281 投稿日時: 2007-5-9 3:41 |
半人前 ![]() ![]() 居住地: 大阪府 投稿: 48
使用環境:
![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について CS3で検証しました。
テスト用のスクリプトではPF使用量の上昇は見受けられませんでした。 ただテストとは別のちょっと説明し難い複雑なスクリプトがあるのですがそちらでは一方的には上昇しないもののPF使用量が上昇しました。開放されないことは無いのですが。 開放されるタイミングはちょっと微妙です・・。 仰られている様に事前予測ができないみたいですね。 この件の結果についてですが 作りを誤るとメモリを使い過ぎる危険がやはりあると思います。 ビットマップキャッシュの使用は注意が必要ですね・・。 |
野中文雄 | Åê¹ÆNo.33530 投稿日時: 2007-5-31 22:23 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
![]() ![]() ![]() |
Re: AS3.0 ガベージコレクションの対象について ビットマップキャッシュの問題について触れたものではありませんが、Adobeの上条さんのblogに「Flash Player 9 のガーベジコレクション」という記事が掲載されました。ActionScript 3.0(AVM2)のガベージコレクションの仕組みを理解するのに役立ちます。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |