首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScriptEngine清除和处理

ScriptEngine清除和处理
EN

Stack Overflow用户
提问于 2015-09-11 09:43:30
回答 1查看 5.3K关注 0票数 7

我的应用程序使用ScriptEngine为我的最终用户提供插件能力。

代码语言:javascript
复制
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("nashorn");

每当用户对其脚本进行更改时,应用程序就会用一个新实例替换引擎实例化。

代码语言:javascript
复制
String newScript = ...;
engine = engineManager.getEngineByName("nashorn");
engine.eval(newScript);

两个密切相关的问题:

  • 我应该尝试重用引擎并在它们上执行某种clear()吗?
  • 如果我只是用一个新实例替换我的引擎,应该以某种方式释放以前的实例,以避免内存泄漏吗?(例如,我可以想象,用户可以创建一个启动线程的脚本。)

问题是,我找不到任何看起来像clear() dispose().或的方法。这是否意味着我目前的做法是正确的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-11 10:33:15

您可以使用单个引擎实例,但可以使用单独的Bindings对象。Bindings充当顶级程序环境,所以如果您想将脚本评估为基本上是“新的全局范围”的内容,那么您可以这样做。了解一下javax.script API文档如何做到这一点。您既可以使用以ScriptEngine.eval作为第二个参数的Bindings,也可以使用以ScriptContext作为第二个参数的参数。

即使没有从上一次评估中幸存下来的脚本代码,您也可以节省一些初始化时间,因为脚本引擎已经预定义了各种JavaScript数据持有者类和属性映射(“隐藏类”)。

还有:是的,一切都是垃圾收集的。不需要显式的“处理”API。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32520413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档