# HG changeset patch # User Jaroslav Tulach # Date 1355137402 -3600 # Node ID a20721a107171429b6ec0a004df4a5236ddd1641 # Parent fbf8eb98a8efa1e7b788cd08803dc739fd4d0f05 Cache the compiled code per class, not globally diff -r fbf8eb98a8ef -r a20721a10717 vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Mon Dec 10 11:26:32 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Mon Dec 10 12:03:22 2012 +0100 @@ -18,6 +18,8 @@ package org.apidesign.vm4brwsr; import java.lang.reflect.Method; +import java.util.Map; +import java.util.WeakHashMap; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; @@ -85,16 +87,20 @@ private final Method m; private final boolean js; Object value; - private static Invocable code; - private static CharSequence codeSeq; + private Invocable code; + private CharSequence codeSeq; + private static final Map compiled = new WeakHashMap(); private Run(Method m, boolean js) { this.m = m; this.js = js; } - private static void compileTheCode(Class clazz) throws Exception { - if (code != null) { + private void compileTheCode(Class clazz) throws Exception { + final Object[] data = compiled.get(clazz); + if (data != null) { + code = (Invocable) data[0]; + codeSeq = (CharSequence) data[1]; return; } StringBuilder sb = new StringBuilder(); @@ -123,6 +129,7 @@ Assert.assertTrue(js instanceof Invocable, "It is invocable object: " + res); code = (Invocable) js; codeSeq = sb; + compiled.put(clazz, new Object[] { code, codeSeq }); } @Test(groups = "run") public void executeCode() throws Throwable {