一分钟后加载类使用cpu的Nashorn Javascript引擎?

时间:2016-03-24 08:06:34

标签: javascript java performance nashorn

使用Java8u60,nashorn

目标是每500毫秒有大约2000个函数对象与每个自己的API对象进行交互。每个脚本大约有5到20行代码。

我所看到的是,在用于编译脚本的初始CPU使用率之后,它运行得非常好。但是大约一分钟后,CPU使用率再次爆发,并且正在加载大量的类。

我想知道为什么会发生这种情况(因为它已经被编译好了吗?),以及有什么方法可以影响这种现象。

下面是使用JvisualVM看到的效果 最初:
initial_running_and_compile

一分钟后,加载了大约10000个课程。请参阅右下角图中的cpu使用情况和峰值:
running_a_minute_and_classesloaded

一些细节:
每个函数对象都有自己的SimpleScriptContext 我使用Swingworkers首先编译,然后在下次调用时执行编译函数 我在每个线程中有一个ScriptEngine实例(Swingworkers使用在JDK中硬编码的10个线程的池),希望编译不会阻塞其他线程。
每个SwingWorker实例对所有具有相同脚本文本的函数对象执行一次CompiledScript,然后退出。(大约有30个独特的脚本。)
这些SwingWorkers每500毫秒实例化并执行一次 这是我用于执行函数对象的代码:

/* 
 * test for script change, if so, recompile 
 */
if (e.cCompiledScript == null) {
  /* compile once, but don't when an error is not cleared */
  if (runner.cErrorString == null) {
    e.initCompiledScript(runner.getScript());
  }
} else {
  /* run the CompiledScript in the (shared)engine with the provided private context */
  e.cCompiledScript.eval(runner.getScriptContext());
}

0 个答案:

没有答案