import javax.script.Compilable; import javax.script.CompiledScript; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class CompiledNoncompiledCompare { public static void main(String[] arguments) throws ScriptException { int iterationCount = 10240; String script = "function add(a, b) { return a + b; }"; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.put("a", 10); engine.put("b", 20); // コンパイルしない場合. { long startTime = System.currentTimeMillis(); for (int i = 0; i < iterationCount; i++) { engine.eval(script); } long processTime = System.currentTimeMillis() - startTime; System.out.println("non - compiled " + processTime); } // コンパイルする場合. { long startTime = System.currentTimeMillis(); Compilable compilable = (Compilable) engine; CompiledScript compiledScript = compilable.compile(script); for (int i = 0; i < iterationCount; i++) { compiledScript.eval(); } long processTime = System.currentTimeMillis() - startTime; System.out.println("compiled " + processTime); } } }