2011-05-05 29 views
2

我正在構建一個javascript api,將使用mozilla rhino調用一些java對象。與mozilla犀牛和內存管理問題的Java腳本

一切都很好,但我想避免無限循環,這可能會減慢我的Java應用程序。

例如(在JavaScript):

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

在現代瀏覽器在一定的時間出現錯誤,告訴腳本正在運行緩慢的應用程序,如果我想繼續和停止腳本之後。

我想在我的Java應用程序上實現這個功能,但如果可能的話,但我不知道如何實現。 我能想到的唯一解決方案是計算每秒調用的方法數量,以及是否有大量的數據停止腳本。你還有其他建議嗎?

+0

我不明白什麼 - 你是否真的需要不斷地調用這個方法?或者你是否試圖實施某種超時機制,如果執行時間超過N秒,就會取消'doSomething()'? – 2011-05-05 14:06:25

+0

@matt b javascript代碼部分將不會由我執行。它將由第三方開發者提供。我想要的不是給他們完全的自由,因爲我的java應用程序實際上是一個基於服務器的應用程序,而且我不想減慢我的機器。 – 2011-05-05 15:13:38

回答

1

計數的方法調用不會對代碼的工作,不調用任何方法,如:

while (true) { 
    i++; 
} 

認爲你想要的是observeInstructionCount().也看到discussion here什麼 - 一些東西,他們正在討論看起來有點不對勁,但它可能會幫助你。

+0

哦,是的。這就是我一直在尋找的。謝謝 – 2011-05-05 15:23:41

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(); 
    }