java – 准备Nashorn引擎的Apache Commons池的有效方法
发布时间:2020-12-15 01:04:16 所属栏目:Java 来源:网络整理
导读:我正在使用Apache Commons Pool来创建一个Nashorn引擎池.在应用程序启动时,我调用 preparePool() 来将minIdle实例数预热到eval()所有脚本到引擎中,以便它可以立即响应对invokeFunction()的调用. 热身 @Overridepublic NashornScriptEngine create() { // ...
我正在使用Apache Commons Pool来创建一个Nashorn引擎池.在应用程序启动时,我调用 热身
根据池大小和预加载脚本的复杂性,这需要相当长的时间. 问题 >我可以只预热一个实例并将其安全地克隆到minIdle实例的数量吗? 相关资源(适当时将更新此部分) > SO: Clone Entire JavaScript Engine 最佳答案
Nashorn的引擎实例既不可复制也不可序列化.我建议您使用单个引擎实例,并使用ScriptEngine.createBindings()创建多个Bindings对象并对其进行池化.您显然需要通过调用ScriptEngine.eval(String | Reader,Bindings)方法来初始化每个Bindings. (您也可以使用ScriptContext对象而不仅仅是Bindings;它们实际上是绑定和out / err流的元组.)
使用单个ScriptEngine的好处是代码共享.将相同的脚本评估为多个绑定仍然只编译脚本一次(如果使用Compilable接口),并且所有函数对象的代码将由相同的编译字节码表示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |