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