From 00d9485f5597fdecc58461bd81df635fafbe494f Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Fri, 25 Nov 2016 16:48:28 -0500 Subject: Merge separate hashmaps for persistent cache into one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This isn’t type-safe, but re-using that same hashmap for both keys and classloaders allows to reduce the number of members in Context. Also we can re-use the same hashMap for other things as well in the coming commits, e.g. timestamps. --- nailgun_launcher/CbtURLClassLoader.java | 5 +--- nailgun_launcher/ClassLoaderCache2.java | 37 ----------------------------- nailgun_launcher/EarlyDependencies.java | 2 +- nailgun_launcher/JavaCache.java | 41 +++++++++++++++++++++++++++++++++ nailgun_launcher/NailgunLauncher.java | 16 ++++++------- 5 files changed, 50 insertions(+), 51 deletions(-) delete mode 100644 nailgun_launcher/ClassLoaderCache2.java create mode 100644 nailgun_launcher/JavaCache.java (limited to 'nailgun_launcher') diff --git a/nailgun_launcher/CbtURLClassLoader.java b/nailgun_launcher/CbtURLClassLoader.java index 38fc905..e3d597e 100644 --- a/nailgun_launcher/CbtURLClassLoader.java +++ b/nailgun_launcher/CbtURLClassLoader.java @@ -15,10 +15,7 @@ public class CbtURLClassLoader extends java.net.URLClassLoader{ + "\n)" ); } - ClassLoaderCache2 cache = new ClassLoaderCache2( - new ConcurrentHashMap(), - new ConcurrentHashMap() - ); + JavaCache cache = new JavaCache( new ConcurrentHashMap() ); public Class loadClass(String name) throws ClassNotFoundException{ Class _class = super.loadClass(name); if(_class == null) throw new ClassNotFoundException(name); diff --git a/nailgun_launcher/ClassLoaderCache2.java b/nailgun_launcher/ClassLoaderCache2.java deleted file mode 100644 index bf9ca3b..0000000 --- a/nailgun_launcher/ClassLoaderCache2.java +++ /dev/null @@ -1,37 +0,0 @@ -package cbt; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import static java.io.File.pathSeparator; -import static cbt.Stage0Lib.*; - -final class ClassLoaderCache2{ - ConcurrentHashMap keys; - ConcurrentHashMap values; - - public ClassLoaderCache2( - ConcurrentHashMap keys, - ConcurrentHashMap values - ){ - this.keys = keys; - this.values = values; - } - - public T get( String key ){ - return values.get( - keys.get( key ) - ); - } - - public Boolean contains( String key ){ - return keys.containsKey( key ); - } - - public T put( T value, String key ){ - LockableKey2 keyObject = new LockableKey2(); - keys.put( key, keyObject ); - values.put( keyObject, value ); - return value; - } -} -class LockableKey2{} \ No newline at end of file diff --git a/nailgun_launcher/EarlyDependencies.java b/nailgun_launcher/EarlyDependencies.java index 8f1962b..fdb54b5 100644 --- a/nailgun_launcher/EarlyDependencies.java +++ b/nailgun_launcher/EarlyDependencies.java @@ -28,7 +28,7 @@ class EarlyDependencies{ String scalaLibrary_2_10_6_File; public EarlyDependencies( - String mavenCache, String mavenUrl, ClassLoaderCache2 classLoaderCache, ClassLoader rootClassLoader + String mavenCache, String mavenUrl, JavaCache classLoaderCache, ClassLoader rootClassLoader ) throws Throwable { scalaReflect_2_11_8_File = mavenCache + "/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar"; scalaCompiler_2_11_8_File = mavenCache + "/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar"; diff --git a/nailgun_launcher/JavaCache.java b/nailgun_launcher/JavaCache.java new file mode 100644 index 0000000..56730df --- /dev/null +++ b/nailgun_launcher/JavaCache.java @@ -0,0 +1,41 @@ +package cbt; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import static java.io.File.pathSeparator; +import static cbt.Stage0Lib.*; + +final class JavaCache{ + ConcurrentHashMap hashMap; + + public JavaCache( + ConcurrentHashMap hashMap + ){ + this.hashMap = hashMap; + } + + public T get( Object key ){ + @SuppressWarnings("unchecked") + T t = (T) hashMap.get( + hashMap.get( key ) + ); + return t; + } + + public Boolean contains( Object key/*, Long timestamp*/ ){ + return hashMap.containsKey( key );/* && ( + (Long) hashMap.get( hashMap.get( hashMap.get(key) ) ) >= timestamp + );*/ + } + + public T put( Object value, Object key/*, Long timestamp*/ ){ + LockableJavaKey keyObject = new LockableJavaKey(); + hashMap.put( key, keyObject ); + hashMap.put( keyObject, value ); + //hashMap.put( value, timestamp ); + @SuppressWarnings("unchecked") + T t = (T) value; + return t; + } +} +class LockableJavaKey{} diff --git a/nailgun_launcher/NailgunLauncher.java b/nailgun_launcher/NailgunLauncher.java index 944daf8..0b41888 100644 --- a/nailgun_launcher/NailgunLauncher.java +++ b/nailgun_launcher/NailgunLauncher.java @@ -15,9 +15,8 @@ import static java.io.File.pathSeparator; */ public class NailgunLauncher{ /** Persistent cache for caching classloaders for the JVM life time. */ - private final static ClassLoaderCache2 classLoaderCache = new ClassLoaderCache2( - new ConcurrentHashMap(), - new ConcurrentHashMap() + private final static JavaCache classLoaderCache = new JavaCache( + new ConcurrentHashMap() ); public final static SecurityManager initialSecurityManager @@ -35,9 +34,8 @@ public class NailgunLauncher{ ((File) get(context, "cache")).toString() + "/", ((File) get(context, "cbtHome")).toString(), ((File) get(context, "compatibilityTarget")).toString() + "/", - new ClassLoaderCache2( - (ConcurrentHashMap) get(context, "permanentKeys"), - (ConcurrentHashMap) get(context, "permanentClassLoaders") + new JavaCache( + (ConcurrentHashMap) get(context, "persistentCache") ) ); return @@ -93,12 +91,12 @@ public class NailgunLauncher{ .getMethod( "run", String[].class, File.class, File.class, BuildStage1Result.class, - Long.class, ConcurrentHashMap.class, ConcurrentHashMap.class + Long.class, ConcurrentHashMap.class ) .invoke( null, (Object) args, new File(cache), new File(CBT_HOME), res, - start, classLoaderCache.keys, classLoaderCache.values + start, classLoaderCache.hashMap ) ); } catch (java.lang.reflect.InvocationTargetException e) { @@ -115,7 +113,7 @@ public class NailgunLauncher{ } public static BuildStage1Result buildStage1( - Boolean changed, long start, String cache, String cbtHome, String compatibilityTarget, ClassLoaderCache2 classLoaderCache + Boolean changed, long start, String cache, String cbtHome, String compatibilityTarget, JavaCache classLoaderCache ) throws Throwable { _assert(TARGET != null, "environment variable TARGET not defined"); String nailgunTarget = cbtHome + "/" + NAILGUN + TARGET; -- cgit v1.2.3