Create a PropsFactory that reuses the reflective constructor
To speed up things and consume less memory when creating actors with argument lists, we should create a PropsFactory that reuses the reflective constructor for a class and only validates the supplied arguments for each successive call.
Leave a comment
on 2013-12-04 03:29 *
By viktorklang
Why do we store the constructor at all?
on 2013-12-04 03:30 *
By viktorklang
I'd love to avoid creating a caching problem
on 2013-12-04 03:43 *
By viktorklang
Also, this is also problematic:
private[this] def cachedActorClass: Class[_ <: Actor] = {
if (_cachedActorClass eq null)
cachedActorClass =
if (classOf[IndirectActorProducer].isAssignableFrom(clazz))
Reflect.instantiate(constructor, args).asInstanceOf[IndirectActorProducer].actorClass
else if (classOf[Actor].isAssignableFrom(clazz))
clazz.asInstanceOf[Class[ <: Actor]]
else
throw new IllegalArgumentException(s"unknown actor creator [$clazz]")
_cachedActorClass
}
private[this] def cachedActorClass: Class[_ <: Actor] = {
if (_cachedActorClass eq null)
cachedActorClass =
if (classOf[IndirectActorProducer].isAssignableFrom(clazz))
Reflect.instantiate(constructor, args).asInstanceOf[IndirectActorProducer].actorClass
else if (classOf[Actor].isAssignableFrom(clazz))
clazz.asInstanceOf[Class[ <: Actor]]
else
throw new IllegalArgumentException(s"unknown actor creator [$clazz]")
_cachedActorClass
}