From 1de728fc751669fb08b5263d5ba4df11b64afda0 Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Wed, 27 Apr 2016 09:51:14 -0400 Subject: for better performance do not generate exceptions during class loading for control flow, but use null instead --- stage1/CachingClassLoader.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'stage1/CachingClassLoader.scala') diff --git a/stage1/CachingClassLoader.scala b/stage1/CachingClassLoader.scala index e75f14c..4ddebda 100644 --- a/stage1/CachingClassLoader.scala +++ b/stage1/CachingClassLoader.scala @@ -5,8 +5,13 @@ import scala.util.Try trait CachingClassLoader extends ClassLoader{ def logger: Logger - val cache = new KeyLockedLazyCache[String,Try[Class[_]]]( new ConcurrentHashMap, new ConcurrentHashMap, Some(logger) ) + val cache = new KeyLockedLazyCache[String,Option[Class[_]]]( new ConcurrentHashMap, new ConcurrentHashMap, Some(logger) ) override def loadClass(name: String, resolve: Boolean) = { - cache.get( name, Try(super.loadClass(name, resolve)) ).get + cache.get( name, Try(super.loadClass(name, resolve)).toOption ).getOrElse(null) + } + override def loadClass(name: String) = { + val _class = super.loadClass(name) + if(_class == null) throw new ClassNotFoundException(name) + else _class } } -- cgit v1.2.3