<!DOCTYPE html>
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>HI, my code loads a Nashorn Script Engine binding values
      representing metadata fields and allows user to write Javascript
      to modify those metadata fields by passing the script to the eval
      method and then checking for modified metadata values. It was
      working fine but as I have increased the number of values added to
      the bindings I have unexpected issues that some binding variables
      values are missing or changed despite the script not modifying
      these values.</p>
    <p>I am now able to mimic the problem with self contained example</p>
    <pre class="default s-code-block"><code data-highlighted="yes"
    class="hljs language-csharp">import javax.script.ScriptContext;
import javax.script.ScriptEngine;

<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span
    class="hljs-title">JsTest</span>
{
     <span class="hljs-function"><span class="hljs-keyword">public</span> <span
    class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span
    class="hljs-title">main</span>(<span class="hljs-params">String[] args</span>) throws Exception</span>
     {
         <span class="hljs-built_in">int</span> numberOfBindingVars = Integer.parseInt(args[<span
    class="hljs-number">0</span>]);
         ScriptEngine engine;
         <span class="hljs-keyword">for</span>(<span
    class="hljs-built_in">int</span> i=<span class="hljs-number">0</span>; i<<span
    class="hljs-number">10</span>; i++)
         {
             engine = <span class="hljs-keyword">new</span> org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().getScriptEngine();
             <span class="hljs-keyword">for</span>(<span
    class="hljs-built_in">int</span> k=<span class="hljs-number">0</span>;k<numberOfBindingVars;k++)
             {
                 engine.put(<span class="hljs-string">"var"</span>+k,<span
    class="hljs-string">"1963"</span>);
             }

             System.<span class="hljs-keyword">out</span>.println(String.format(<span
    class="hljs-string">"Bindings %d"</span>, engine.getBindings(ScriptContext.ENGINE_SCOPE).size()));
             <span class="hljs-keyword">for</span>(<span
    class="hljs-built_in">int</span> k=<span class="hljs-number">0</span>;k<numberOfBindingVars;k++)
             {
                 <span class="hljs-keyword">if</span>(engine.<span
    class="hljs-keyword">get</span>(<span class="hljs-string">"var"</span>+k)==<span
    class="hljs-literal">null</span>)
                 {
                     System.<span class="hljs-keyword">out</span>.println(<span
    class="hljs-string">"Missing var"</span>+k);
                 }
             }
         }
     }
}

Running this with parameter **400** works fine and gives me 

    Bindings 400
    Bindings 400
    Bindings 400
    Bindings 400
    Bindings 400
    Bindings 400
    Bindings 400
    Bindings 400
    Bindings 400
    Bindings 400

But if I increase parameter to **500** the binding count is inconsistent , although wierdly checking for each value doesnt reveal any missing.

    Bindings 500
    Bindings 499
    Bindings 498
    Bindings 497
    Bindings 496
    Bindings 495
    Bindings 494
    Bindings 500
    Bindings 499
    Bindings 498

And if run with **1000** I get inconsistent count again, also unable to find certain vars around the 500 mark

    Bindings 1000
    Bindings 999
    Missing var448
    Bindings 1000
    Bindings 999
    Missing var448
    Bindings 998
    Missing var448
    Missing var449
    Bindings 997
    Missing var448
    Missing var449
    Missing var450
    Bindings 996
    Missing var448
    Missing var449
    Missing var450
    Missing var451
    Bindings 995
    Missing var448
    Missing var449
    Missing var450
    Missing var451
    Missing var452
    Bindings 994
    Missing var448
    Missing var449
    Missing var450
    Missing var451
    Missing var452
    Missing var453
    Bindings 993
    Missing var448
    Missing var449
    Missing var450
    Missing var451
    Missing var452
    Missing var453
    Missing var454

In all cases works okay the first time, but with the 500 and 1000 calls thesubsequent iterations are incorrect.
Seems like there is some other Nashorn process trimming the size of the bindings?</code>
</pre>
    <p></p>
  </body>
</html>