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

Reply via email to