Scala演员垃圾回收

4

场景:我有这段代码:

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

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

MyActor实例是否被垃圾回收了?如果没有,我该如何确保它被回收?如果我创建一个临时actor(使用“actor”方法),那么这个actor会被回收吗?

3个回答

3

该主题Scala用户邮件列表中很相关。

菲利普·哈勒在那里提到使用特定的调度程序(在Scala 2.8中可用)以实现在垃圾收集之前终止Actor,可以是全局的或每个Actor的基础。


2

1
你尝试过添加一个finalize方法来查看它是否存在吗?我认为这里的答案是演员子系统的行为与您预期的没有任何区别:除了在处理期间在线程本地缓存参考之外,它不会缓存对您的演员的任何引用。

因此,我预计您的演员是收集的候选对象(假设子系统在Actor处理消息后正确清除ThreadLocal引用,这似乎确实出现在Reaction.run方法中)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接