Niewbie OutOfMemory problem

Posted by Nick on Stack Overflow See other posts from Stack Overflow or by Nick
Published on 2010-04-30T01:26:58Z Indexed on 2010/04/30 1:27 UTC
Read the original article Hit count: 414

Filed under:
|
|

So I am trying to create a producer/consumer type scala app. The LoopControl just sends a message to the MessageReceiver continoually. The MessageReceiver then delegates work to the MessageCreatorActor (whose work is to check a map for an object, and if not found create one and start it up). Each MessageActor created by this MessageCreatorActor is associated with an Id. Eventually this is where I want to do business logic. But I run out of memory after 15 minutes. Any help is appreciated

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 }

© Stack Overflow or respective owner

Related posts about scala

Related posts about outofmemoryerror