Scala 新手失忆问题
我正在尝试创建一个生产者/消费者类型的Scala应用程序。Scala 新手失忆问题,scala,actor,out-of-memory,Scala,Actor,Out Of Memory,我正在尝试创建一个生产者/消费者类型的Scala应用程序。 LoopControl只是不断地向MessageReceiver发送一条消息。 然后,MessageReceiver将工作委托给MessageCreatorActor(其工作是检查对象的映射,如果找不到,则创建一个并启动它)。 此MessageCreatorActor创建的每个MessageActor都与一个Id关联。 最终,这就是我想要做业务逻辑的地方。 但15分钟后我的内存就用完了。 谢谢你的帮助 import scala.acto
LoopControl
只是不断地向MessageReceiver
发送一条消息。
然后,MessageReceiver
将工作委托给MessageCreatorActor
(其工作是检查对象的映射,如果找不到,则创建一个并启动它)。
此MessageCreatorActor
创建的每个MessageActor
都与一个Id关联。
最终,这就是我想要做业务逻辑的地方。
但15分钟后我的内存就用完了。
谢谢你的帮助
import scala.actors.Actor
import java.util.HashMap;
import scala.actors.Actor._
case object LoopControl
case object MessageReceiver
case object MessageActor
case object MessageActorCreator
class MessageReceiver(msg: String) extends Actor {
var messageActorMap = new HashMap[String, MessageActor]
val messageCreatorActor = new MessageActorCreator(null, null)
def act() {
messageCreatorActor.start
loop {
react {
case MessageActor(messageId) =>
if (msg.length() > 0) {
var messageActor = messageActorMap.get(messageId);
if(messageActor == null) {
messageCreatorActor ! MessageActorCreator(messageId, messageActorMap)
}else {
messageActor ! MessageActor
}
}
}
}
}
}
case class MessageActorCreator(msg:String, messageActorMap: HashMap[String, MessageActor]) extends Actor {
def act() {
loop {
react {
case MessageActorCreator(messageId, messageActorMap) =>
if(messageId != null ) {
var messageActor = new MessageActor(messageId);
messageActorMap.put(messageId, messageActor)
println(messageActorMap)
messageActor.start
messageActor ! MessageActor
}
}
}
}
}
class LoopControl(messageReceiver:MessageReceiver) extends Actor {
var count : Int = 0;
def act() {
while (true) {
messageReceiver ! MessageActor ("00-122-0X95-FEC0" + count)
//Thread.sleep(100)
count = count +1;
if(count > 5) {
count = 0;
}
}
}
}
case class MessageActor(msg: String) extends Actor {
def act() {
loop {
react {
case MessageActor =>
println()
println("MessageActor: Got something-> " + msg)
}
}
}
}
object messages extends Application {
val messageReceiver = new MessageReceiver("bootstrap")
val loopControl = new LoopControl(messageReceiver)
messageReceiver.start
loopControl.start
}
我想知道你的代码是否真的在地图中找到了现有的对象 如果找不到旧的MessageActor,它会一直创建新的MessageActor,直到内存耗尽
尝试测试。它正在地图中查找现有对象。我可以用println(…)来验证