Performance issues
A. Sundararajan
sundararajan.athijegannathan at oracle.com
Wed Feb 19 19:36:15 PST 2014
Hi,
Thanks for writing to us.
Two things:
1) 'rhino' mode uses Rhino's API directly (Context ..). For nashorn, it
uses 'javax.script' engine API. I thought may be on jdk7, I could run
'jre' mode and try jdk7's embedded rhino based javax.script engine.
After clean and re-run test with jdk7 results in
FAILURE: Build failed with an exception.
* Where:
Build file '/home/sundar/src/citeproc-java/build.gradle' line: 230
* What went wrong:
A problem occurred evaluating root project 'citeproc-java'.
>
org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or
--debug option to get more log output.
BUILD FAILED
With jdk8, 'jre' and 'rhino' mode run fine
2) Json handling for rhino uses RhinoJsonBuilder which uses Scriptable
of Rhino. For nashorn, it uses 'string json builder' - which presumably
involves more string handling?
If you can tell me how to run with jdk7, then perhaps we can have proper
comparison. 'jre' mode on jdk7 with rhino javax.script engine and 'jre'
mode on jdk8 with nashorn javax.script engine.
Thanks
-Sundar
On Wednesday 19 February 2014 09:09 PM, Michel Krämer wrote:
> Hi folks,
>
> I'm experiencing very drastic performance issues with Nashorn (JDK 8
> b129) compared to Rhino. My script takes almost 13 minutes instead of
> 16 seconds! I hope you guys can tell me what's going on here.
>
> I've recently tested citeproc-java
> (https://github.com/michel-kraemer/citeproc-java) under JDK8 in order
> to make sure it keeps running flawlessly when the next Java version
> comes out. citeproc-java uses citeproc-js under the hood which is a
> rather large JavaScript library consisting of one file of about 540
> KB, 13.500 lines of code
> (https://bitbucket.org/fbennett/citeproc-js/wiki/Home).
>
> Previously I used Rhino to execute the JavaScript and it worked quite
> well. There is a test suite consisting of 758 tests. Running this
> suite takes about 16 seconds (JavaScript compiled to byte code) or 46
> secs (interpreted JavaScript). However, if I try to run the same test
> suite with Oracle Nashorn it takes 12.5 minutes! (see timings below)
>
> This is a very drastic performance drop and I was very surprised to
> see this. Is there some way to debug Nashorn in order to find out what
> is actually going on here?
>
> Timings on my computer (i5-3570K, 3.4 GHz, 4 cores, 16 GB RAM):
>
> Rhino 1.7R4 (JavaScript compiled to byte code):
> 16.176 secs
>
> Rhino 1.7R3 (bundled w/ JDK 7, interpreted JavaScript):
> 45.970 secs
>
> Nashorn (JDK 8 b129):
> 754.266 secs
>
> Steps to reproduce (no prerequisites other than JDK8):
>
> git clone https://github.com/michel-kraemer/citeproc-java.git
> cd citeproc-java
> ./gradlew runTestSuite -PscriptRunnerType=rhino
> ./gradlew runTestSuite -PscriptRunnerType=jre
>
> Cheers,
> Michel
More information about the nashorn-dev
mailing list