垃圾收集斯卡拉演员

时间:2009-11-25 14:34:31

标签: scala actor

场景:我有这段代码:

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

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

是收集的MyActor实例垃圾?如果没有,我该如何确定它?如果我创建一个ad-hoc actor(使用'actor'方法),那个演员GCed?

3 个答案:

答案 0 :(得分:3)

<{3}}上的{p> This thread是相关的。

有Phillip Haller提到使用特定的调度程序(在Scala 2.8中可用)在垃圾收集之前启用Actor的终止,无论是在全局还是每个actor的基础上。

答案 1 :(得分:2)

使用标准Actor库的内存泄漏导致其他Actor实现。这就是David Pollak和Jonas Boner的Lift电影库的原因,你可以在这里阅读更多信息:http://blog.lostlake.org/index.php?/archives/96-Migrating-from-Scala-Actors-to-Lift-Actors.html

答案 2 :(得分:1)

您是否尝试过添加finalize方法来查看是否存在?我认为这里的答案是,actor子系统的行为与你期望它的行为没有什么不同:它不会缓存对你的actor的任何引用,除非在处理期间在本地线程中。

因此,我希望你的actor是收集的候选者(假设子系统在actor处理了它确实在Reaction.run方法中确实发生的消息之后正确地清除了ThreadLocal引用)。 / p>