Java-скриптинг с Mozilla Rhino и проблема управления памятью - PullRequest
2 голосов
/ 05 мая 2011

Я создаю javascript api, который будет вызывать некоторые java-объекты, используя Mozilla Rhino.

Все хорошо и здорово, однако я хочу избежать неограниченного зацикливания, которое может замедлить работу моего Java-приложения.

например (в javascript):

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

В современных браузерах по истечении определенного времени появляется ошибка, сообщающая, что скрипт заставляет приложение работать медленно, и если я хочу продолжить и остановить скрипт.

Я хочу реализовать это в своем Java-приложении, если это возможно, но я не знаю как. Единственное решение, о котором я могу подумать, - это подсчитать количество вызываемых методов в секунду и, если это огромное количество, остановить скрипт. У вас есть другие идеи?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Подсчет вызовов методов не будет работать для кода, который не вызывает никаких методов, например:

while (true) {
    i++;
}

Я думаю, , что вы хотите наблюдаем инструкцию (). Также посмотрите обсуждение здесь - некоторые из обсуждаемых вещей выглядят немного сомнительно , но это может помочь вам.

0 голосов
/ 05 мая 2011

Если вы можете сделать приложение многопоточным, вы можете создать новый поток, обрабатывающий каждый вызов из 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();
    }
...