【问题标题】:Scala actor memory leaks, are they as bad as It was or improving?Scala Actor 内存泄漏,它们是像以前一样糟糕还是正在改进?
【发布时间】:2011-11-16 06:27:54
【问题描述】:

我目前正在使用 Programming in Scala 2nd edition 学习 Scala 2.8。

但我开始真正关心像Clojure vs Scala这样的帖子

Scala 在内存泄漏方面有这么糟糕吗?这不是我第一次听到有关演员和内存泄漏问题的信息。

有那么糟糕吗?新版本是否会在合理的时间内修复它?如果合并,Akka 会解决所有问题吗?

因为看到 scala 最大的优点之一 的大问题(至少对我来说,像 Erlang 这样的演员是 lang 的主要糖果之一)如果他们无法做到,这确实是一个主要缺点修复它们并在此基础上进行改进。

【问题讨论】:

标签: scala scala-2.8


【解决方案1】:

我知道有人使用大量演员,所以我很确定内存泄漏并不普遍。

Scala Actors 在 2009 年(Scala 2.7.x)有内存泄漏吗?是的,他们确实。例如,SI-1801SI-1948

目前,我可以找到三张关于内存泄漏的票:SI-3467SI-3920SI-3921

我确实对你发表的一条评论有异议,但是:

scala 最大的优点之一(至少对我来说 Erlang 喜欢演员 是lang的主要糖果之一)

演员是语言的一部分!他们是图书馆!这就是 Scala 的全部意义所在,这正是 Scala 名称的来源:您可以通过库添加类似这样的东西。

目前,Scala 中有四种不同的 actor 实现:主库、Scalaz、Lift 和 Akka。您绝对没有没有理由将自己绑定到标准库之一。事实上,主库中的演员的问题之一是,他们的写作更多是为了证明可以做到这一点,而不是解决实际问题。

如果您想使用演员,请使用 Akka。您可以立即使用它。天哪,如果你喜欢语法受虐狂,你甚至可以将它与 Java 一起使用。 Akka 是一个出色的库,它远远超出了简单地提供 Actor 的范围,还提供了所有支持工具以使它们变得有用(如主管和负载均衡器),以及其他完全支持并发的工具,如 Agents(Clojure 风格)、STM (基于Multiverse),与Spring、Camel、AMQP等集成。

Scala 的优势在于可以通过库来扩展它。如果您将自己限制在标准库中的内容,那么您就是在扔掉它。

【讨论】:

  • 感谢您的回答。你说得对,我的说法不正确。
【解决方案2】:

你应该试试 Akka。它非常健壮、轻巧且可调节。例如,您可以bound mailbox sizes(并选择邮箱已满时的操作)。

【讨论】:

    【解决方案3】:

    我不太了解 Scala 内部结构,但我猜想 Scala 的 actor 实现会无限地对每条消息进行排队。

    如果演员没有足够快地从队列中拉出,队列会增长并消耗内存。

    我猜想一个更少的内存愤怒实现会限制一次排队的消息数量,从而消耗更少的内存(但也会在队列满时阻塞消息发送者)。

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 2015-09-27
      • 2011-11-15
      • 1970-01-01
      • 2014-09-07
      • 2011-05-23
      • 2012-07-12
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多