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

java scripting with mozilla rhino and memory management problem

本文关键字:内存 管理 问题 脚本 Java mozilla rhino 编写      更新时间:2023-09-26

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

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

例如(在javascript中):

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

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

如果可能的话,我想在我的java应用程序上实现这一点,但我不知道如何。我能想到的唯一解决方案是计算每秒被调用的方法的数量,如果这个数字太大,就停止脚本。你还有别的主意吗?

计算方法调用对不调用任何方法的代码不起作用,例如:

while (true) {
    i++;
}

认为你想要的是observveinstructioncount()。也可以看看这里的讨论-他们讨论的一些东西看起来有点不确定,但它可能会帮助你。

如果你可以使应用程序多线程,你可以生成一个新的线程来处理来自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();
    }