我有一个案例,每个Akka集群节点(JVM)都有一个单独的参与者负责创建和维护(READ/WRITE)一些巨大对象的Map。同一节点上的其他参与者需要共享(READ)Map(Map将被传递到一些第三方库,所以没有办法通过Akka消息来更改Map访问)。
case class ShareMap(m: Map[String, HugeObject])
class MapOwner extends Actor {
var m: immutable.Map[String, HugeObject] = ???
override def receive: Receive = {
case UpdateMap(delta) =>
val m2 = m ++ delta
this.m = m2
case GetMap =>
sender ! ShareMap(m)
}
}
我希望通过将Map引用发送到同一JVM中的参与者来共享不可变Map。
我的问题是:对于我的情况(在同一个JVM中),是否可以确保不会创建重复的map对象?2我对内存使用和性能有一些担心。
1条答案
按热度按时间vddsk6oq1#
按docs
Akka参与者之间发送的消息是JVM对象(例如Scala case类的示例)。位于同一JVM上的参与者之间的消息传递是直接的。它通过引用传递完成。然而,必须逃离JVM以到达运行在不同主机上的参与者的消息必须经历某种形式的序列化(即对象必须转换为字节数组或从字节数组转换)。
这应该只是一个参考。