Two questions on Nashorn features
A. Sundararajan
sundararajan.athijegannathan at oracle.com
Tue Mar 25 05:30:44 UTC 2014
Nashorn spilts script into fragments and generates multiple classes (as
needed). But, yes - you may still face issues with very large scripts -
but we do test nashorn with large scripts.
No instruction count feature in nashorn - as nashorn generates bytecode
always. Generated bytecode is not instrumented in anyway to report
"instruction count" or any such.
-Sundar
On Tuesday 25 March 2014 10:53 AM, Greg Brail wrote:
> I'm still looking at porting a lot of Rhino code to Nashorn since it seems
> to be measurably faster and it is going to keep up with the Java specs
> better than Rhino.
>
> There are two Rhino features that seem to be to be hard to replicate in the
> world of Nashorn and I wonder if the team has any idea if we could get to
> them.
>
> First, Rhino blows up when trying to compile scripts that produce more than
> 64K of bytecode, but you can fall back to interpreted mode in that case so
> that they still run, although much more slowly. I realize that Nashorn has
> no interpreter. Is it still subject to the 64K class file limit? Is there
> some other work around for large scripts (which are surprisingly common in
> the Node.js world).
>
> Second, Rhino has the following handy feature:
>
> /**
> * Turn on or off generation of code with callbacks to
> * track the count of executed instructions.
> * Currently only affects JVM byte code generation: this slows down the
> * generated code, but code generated without the callbacks will not
> * be counted toward instruction thresholds. Rhino's interpretive
> * mode does instruction counting without inserting callbacks, so
> * there is no requirement to compile code differently.
> * @param generateObserverCount if true, generated code will contain
> * calls to accumulate an estimate of the instructions executed.
> */
> public void setGenerateObserverCount(boolean generateObserverCount) {
> this.generateObserverCount = generateObserverCount;
> }
>
> with this feature turned on, any script will periodically call a callback,
> and we can implement that callback to check a timer and throw an exception.
> This can cause a long-running task to abort. This is really handy if you
> want to run untrusted Javascript in a container, because it protects your
> container from scripts that contain infinite loops.
>
> Is there any chance that the Nashorn team might consider such a feature in
> an upcoming release? Or can you think of another way to do this in the
> world of Java 8?
>
>
More information about the nashorn-dev
mailing list