Scala-Actors,避免内存泄漏是一种好习惯吗?

时间:2011-09-19 13:51:03

标签: scala memory-leaks concurrency actor

所有问题均以问题“Scala, Actors, what happens to unread inbox messages?”开头。我正在考虑如何在很多演员的大型系统中避免这些问题。

我发现自己写的是这样的:

react {
  //all cases
  case any: AnyRef => logMessageWithoutCase(any)
}

是否可以避免内存泄漏或是否有一些副作用?

UPDATE 1 感谢@Alexey Romanov和@Luigi Plinge,如果在系统中会有一些垃圾邮件演员吗?
这样的事情:

react{
  //all cases
  case msg: Any => Spam!msg
}

最后在垃圾邮件中会记录或保存到数据库。我认为,这是更直观的解决方案。

2 个答案:

答案 0 :(得分:2)

记录消息的副作用:)由于日志记录可能需要写入磁盘或数据库,如果您有许多不匹配的消息,这可能会降低性能。否则是的,这是避免内存泄漏的好方法。

答案 1 :(得分:2)

您也可以使用Akka actors进行调查,因为它们强制执行顺序消息处理,因此不会遇到此问题。这里,未处理的消息被传递给unhandled()回调,默认情况下会记录并抛出异常。

另一件需要考虑的事情是,Akka actor将在中期内取代目前的scala.actor包。这对于拥有众多演员的大型系统尤其有用,因为目前的Scala演员并不像Akka演员那样轻量级。