【发布时间】:2012-02-03 14:16:10
【问题描述】:
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 脚本两次。当循环迭代 第二次,并尝试再次解析 groovyscript,什么会 发生?
- 第二次创建另一个对象时会发生什么。 类加载器会设法从类路径中获取类吗? 重新编译一遍?
- 触发重编译时,groovy如何知道源是什么 改变了吗?
【问题讨论】:
-
我假设在您最后一个问题之后,当我向您展示所有这些的源代码在哪里时,您没有去查看源代码?
-
@tim_yates 嗨,蒂姆你能帮我吗,我已经去源代码了