我的应用程序使用ScriptEngine为我的最终用户提供插件能力。
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("nashorn");每当用户对其脚本进行更改时,应用程序就会用一个新实例替换引擎实例化。
String newScript = ...;
engine = engineManager.getEngineByName("nashorn");
engine.eval(newScript);两个密切相关的问题:
clear()吗?问题是,我找不到任何看起来像clear() dispose().或的方法。这是否意味着我目前的做法是正确的?
发布于 2015-09-11 10:33:15
您可以使用单个引擎实例,但可以使用单独的Bindings对象。Bindings充当顶级程序环境,所以如果您想将脚本评估为基本上是“新的全局范围”的内容,那么您可以这样做。了解一下javax.script API文档如何做到这一点。您既可以使用以ScriptEngine.eval作为第二个参数的Bindings,也可以使用以ScriptContext作为第二个参数的参数。
即使没有从上一次评估中幸存下来的脚本代码,您也可以节省一些初始化时间,因为脚本引擎已经预定义了各种JavaScript数据持有者类和属性映射(“隐藏类”)。
还有:是的,一切都是垃圾收集的。不需要显式的“处理”API。
https://stackoverflow.com/questions/32520413
复制相似问题