4

シナリオ: 私はこのコードを持っています:

class MyActor extends Actor {
   def act() {
     react { 
       case Message() => println("hi")
     }
   }
}

def meth() {
  val a = new MyActor
  a.start
  a ! Message()
}

MyActor インスタンスはガベージ コレクションされますか? そうでない場合、どうすればそれを確認できますか? ('actor' メソッドを使用して) アドホック アクターを作成した場合、そのアクターは GC されますか?

4

3 に答える 3

3

scala-userメーリング リストこのスレッドは関連しています。

Phillip Haller は、特定のスケジューラ (Scala 2.8 で利用可能) を使用して、グローバルまたはアクターごとに、ガベージ コレクションの前にアクターを終了できるようにすることについて言及しています。

于 2009-11-26T15:58:23.587 に答える
2

標準のActorライブラリでのメモリリークにより、他のActorの実装が発生しました。これが、DavidPollakとJonasBonerのLift用アクターライブラリの理由であり、ここでさらに詳しく読むことができます:http: //blog.lostlake.org/index.php?/archives/96-Migrating-from-Scala- Actors- to-Lift-Actors.html

于 2009-11-26T15:34:11.487 に答える
1

finalizeそれがそうであるかどうかを確認するメソッドを追加しようとしましたか? ここでの答えは、アクター サブシステムが期待どおりに動作するということだと思います。処理中のスレッド ローカルを除いて、アクターへの参照はキャッシュされません。

したがって、あなたのアクターはコレクションの候補であると予想されます (アクターがReaction.runメソッドで実際に実行しているように見えるメッセージを処理した後、サブシステムが ThreadLocal 参照を正しくクリアすると仮定します)。

于 2009-11-25T15:04:41.283 に答える