我有一个相当基本的包装类围绕scala akka actorRef.基本上该类有一个作为actorRef的字段,并公开了许多将"告诉"特定消息给actorRef的方法.以这种方式,我可以遵循指定API并避免暴露tell或消息类.我在我的程序中遇到了内存泄漏,我想知道我的akka actor周围的包装是否导致问题.我在下面写了这个模拟来测试我的理论.
import akka.actor.{ActorSystem, ActorRef, PoisonPill}
import akka.actor.ActorDSL._
implicit val as = ActorSystem()
def createMemoryActor(): ActorRef = actor(new Act {
Array.fill(99999999)(1.0) // Just to take up memory
become {
case _ => print("testing memory leaks")
}
})
val memoryActor = createMemoryActor() // memory usage jumps up
memoryActor ! PoisonPill
System.gc() // memory usage goes back down
case class ActorWrapper() {
val memoryActor = createMemoryActor()
}
def doNothing(): Unit = {
val shouldGetGCed = ActorWrapper()
()
}
doNothing() // …Run Code Online (Sandbox Code Playgroud)