2011-09-19 64 views
1

全部从问题“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 
} 

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

+1

我建议删除AnyRef类型的限制或将其更改为Any,以便捕获所有的AnyVal类型 –

+0

好主意,我会尝试它。 –

回答

2

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

要考虑的另一件事是,Akka演员将在中期内替换当前的scala.actor包。这对于有很多演员的大型系统尤其有利,因为目前的斯卡拉演员并不像阿卡演员那么轻。

2

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