使用mozilla rhino编写java脚本和内存管理问题

时间:2011-05-05 13:54:41

标签: java javascript scripting rhino

我正在构建一个javascript api,它将使用mozilla rhino调用一些java对象。

一切都很好,但是我想避免无限制的循环,这可能会减慢我的java应用程序。

例如(在javascript中):

while(true) doSomething(); // doSomthing will call a method in java

在现代浏览器中,在一段时间后出现错误,告诉脚本正在使应用程序运行缓慢,并且如果我想继续并停止脚本。

如果可能的话,我想在我的java应用程序上实现它,但我不知道如何实现。 我能想到的唯一解决方案是计算每秒调用的方法数量,以及停止脚本的数量是多少。你还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

计算方法调用不适用于不调用任何方法的代码,例如:

while (true) {
    i++;
}

想想你想要的是什么observeInstructionCount().另见discussion here - 他们讨论的一些东西看起来有些不确定,但它可能对你有所帮助。

答案 1 :(得分:0)

如果你可以使应用程序多线程,你可以生成一个新的线程来处理来自javascript的每个调用。在线程的开头,你记录开始时间,并创建一些超时逻辑来实现它。

    public void doJavaScript() {
      final long start = System.currentTimeMillis();
      final long timeout = 1000;
      new Thread(){
          @Override
          public void run() {
             while ((start + timeout) < System.currentTimeMillis()) {
                ... do work ...
             }
          }
      }.start();
    }