У меня есть случай, когда каждый узел кластера Akka (JVM) имеет одного действующего лица, ответственного за создание и поддержание (READ / WRITE) карты некоторых огромных объектов. Другие актеры в том же узле должны совместно использовать (READ) карту (карта будет передана в какую-либо стороннюю библиотеку, поэтому нет способа изменить доступ к карте с помощью сообщений Akka).
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)
}
}
I хотите поделиться неизменной картой, отправив ссылку на карту актерам в той же JVM.
Мой вопрос: для моего случая (в рамках той же JVM) будет ли гарантировано, что дублированный объект карты не будет создан? У меня есть некоторые опасения по поводу использования памяти и производительности.