GroovyClassloader の動作理解、
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");
GroovyScriptEngineImpl groovyEngineImpl = (GroovyScriptEngineImpl) engine;
ループで、
for (int i = 0; i < 10; i++) {
long startTime = System.currentTimeMillis();
classLoader = new GroovyClassLoader(groovyEngineImpl.getClassLoader().getParent());
fileName = fileName + i;
Class groovyClass = classLoader.parseClass(s,fileName);
long endTime = System.currentTimeMillis();
System.out.println("Total elapsed time in execution o " + (endTime-startTime));
startTime = System.currentTimeMillis();
groovyClass = classLoader.parseClass(s,fileName);
endTime = System.currentTimeMillis();
System.out.println("Second Time Total elapsed time in execution o " + (endTime-startTime));
}
上記のコードに関していくつか質問があります。
- for ループで、新しい groovyclassloder オブジェクトを作成し、groovy スクリプトを 2 回解析しています。ループが 2 度目に繰り返され、groovyscript を再度解析しようとすると、どうなりますか?
- 別のオブジェクトが作成されたときに 2 回目に何が起こるか。クラスローダは、クラスパスからクラスを取得するか、再度再コンパイルしますか?
- 再コンパイルがトリガーされると、groovy はソースが変更されたことをどのように認識しますか?