import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class TestJsMemLeak {
  private static final String JS_TEST_NAME = "test";
  private static final String JS_TEST_SOURCE =
      "for (var i = 0; i < 10; ++i) {\n" +
      " JsJavaUtil.testFunc();\n" +
      "}";

  public static final class JsJavaUtil {
    private long counter = 0;

    public long testFunc() {
      return counter++;
    }
  }

  public static void main(final String[] args) throws Exception {
    System.setProperty("nashorn.args", "--no-java -doe --language=es5");

    for (long i = 0; true; ++i) {
      final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
      scriptEngine.put("JsJavaUtil", new JsJavaUtil());
      scriptEngine.put("script", JS_TEST_SOURCE);
      scriptEngine.put("scriptName", JS_TEST_NAME);
      scriptEngine.eval("load({ script: script, name: scriptName })");
      System.gc();
      if (i % 100 == 0) {
        System.out.println(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory());
      }
    }
  }
} 