Austin, I’ve filed https://bugs.openjdk.java.net/browse/JDK-8067764 <https://bugs.openjdk.java.net/browse/JDK-8067764> to track this issue. Thank you for reporting it and thank you for the reproducer. It makes everything so much easier to have a working setup to start from.
Regards Marcus & the Nashorn team > On 15 Dec 2014, at 15:30, Marcus Lagergren <[email protected]> > wrote: > > No it’s great! Having the reproducer is all we need! Thanks. > > /M > >> On 15 Dec 2014, at 15:17, Austin Jackson <[email protected]> wrote: >> >> Sorry if I'm not being much help, I hope I can supply as much information as >> I can. >> >> >> ------------ >> >> Austin Jackson >> [email protected] <mailto:[email protected]> >> >> On Dec 15, 2014, at 8:15 AM, Marcus Lagergren <[email protected] >> <mailto:[email protected]>> wrote: >> >>> Yeah I’ve seen your bootstrap code. I’m curious about the uglify libraries, >>> but don’t worry. We’ll analyze them. >>> >>> /M >>> >>>> On 15 Dec 2014, at 15:14, Austin Jackson <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>> I honestly don't know. This is my first time using Nashorn, and I don't >>>> know what algorithms and phases go on in Uglify itself. Perhaps they use >>>> JSON internally to keep track of things. Being that it's meant for a more >>>> "native" JavaScript engine I wouldn't doubt it. Me myself? I haven't >>>> purposely tried to use any JSON. >>>> >>>> >>>> ------------ >>>> >>>> Austin Jackson >>>> [email protected] <mailto:[email protected]> >>>> >>>> On Dec 15, 2014, at 8:10 AM, Marcus Lagergren <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>>> This produces a recording that shows where individual method time is >>>>> spent (among other things). It can be inspected with the jmc tool in >>>>> $JAVA_HOME/bin. >>>>> I did multiple runs with the same hot code, and I still have a slowdown. >>>>> Some things stick out, such as manual calling of accessors, instead of >>>>> compiling them to method handles ones and for all. We’ll dig further. >>>>> >>>>> Do you have any idea if you do a lot of JSON stuff in there? >>>>> >>>>> /M >>>>> >>>>>> On 15 Dec 2014, at 15:09, Austin Jackson <[email protected] >>>>>> <mailto:[email protected]>> wrote: >>>>>> >>>>>> Chisel runs timing inside itself via calculating the difference of >>>>>> system time before and after, however it may not be as useful as the JVM >>>>>> arguments you just showed me. :) >>>>>> >>>>>> >>>>>> ------------ >>>>>> >>>>>> Austin Jackson >>>>>> [email protected] <mailto:[email protected]> >>>>>> >>>>>> On Dec 15, 2014, at 7:36 AM, Marcus Lagergren >>>>>> <[email protected] <mailto:[email protected]>> wrote: >>>>>> >>>>>>> Hi Austin! >>>>>>> >>>>>>> Is this particular timing when you are uglifying the jquery test script >>>>>>> that you supplied? I do a full Nashorn run, and I indeed see a slowdown >>>>>>> that probably shouldn’t be there. There are several sources of overhead >>>>>>> and no _huge_ single low hanging fruit, as far as I can tell (damn). >>>>>>> >>>>>>> To figure this out, I did a run to produce a Mission Control recording >>>>>>> and inspected it. >>>>>>> >>>>>>> java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder >>>>>>> -XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath=recording.jfr,stackdepth=1024 >>>>>>> - -jar chisel.jar compile uglify -i test-files/jquery-2.1.1.js -o >>>>>>> output.js >>>>>>> >>>>>>> There is field guard overhead, and there are a few megamorphic fields, >>>>>>> but none of this take up more than 15% of the runtime. >>>>>>> >>>>>>> I’ll file this a bug and have someone dive deeper. >>>>>>> >>>>>>> Thanks a lot for the report! Much appreciated. >>>>>>> >>>>>>> /M >>>>>>> >>>>>>>> On 15 Dec 2014, at 04:15, Austin Jackson <[email protected] >>>>>>>> <mailto:[email protected]>> wrote: >>>>>>>> >>>>>>>> Hello! I’m Austin and I like Nashorn. >>>>>>>> >>>>>>>> I was prompted by @lagergren >>>>>>>> <https://twitter.com/lagergren/status/543526837293711360 >>>>>>>> <https://twitter.com/lagergren/status/543526837293711360>> to share >>>>>>>> something with you all that might be of use. I love the work that you >>>>>>>> all have done with Nashorn making it easy to write JavaScript code and >>>>>>>> utilize standard Java classes — it’s absolutely great! >>>>>>>> >>>>>>>> I, personally, have been using Nashorn to try and run NodeJS modules >>>>>>>> under it, particularly UglifyJS2. >>>>>>>> >>>>>>>> All the files I mention following this are available in a Github >>>>>>>> release below of my app I’m hoping to use Nashorn with. There is a >>>>>>>> executable Jar file with the correct directories and instructions on >>>>>>>> how to run on the website below. The source code is available here >>>>>>>> below, also. >>>>>>>> >>>>>>>> My app is currently a test that wraps UglifyJS2 with bindings in >>>>>>>> net.austin.chisel.wrappers.UglifyWrapper.java. You can ignore the LESS >>>>>>>> stuff because that runs on Rhino and isn’t my library (it’s here >>>>>>>> <https://github.com/marceloverdijk/lesscss-java >>>>>>>> <https://github.com/marceloverdijk/lesscss-java>>). >>>>>>>> >>>>>>>> The important thing is that when I run UglifyJS2 natively under NodeJS >>>>>>>> (V8), then the compile time is around 1 second more or less (I had no >>>>>>>> way to time it, that I knew of), but when I run my wrapper, it takes >>>>>>>> around 47.5 seconds to do the same! However, the resulting copies are >>>>>>>> verbatim and Nashorn functioned entirely correct, just a big >>>>>>>> performance problem. @lagergren >>>>>>>> <https://twitter.com/lagergren/status/544231448900034561 >>>>>>>> <https://twitter.com/lagergren/status/544231448900034561>> said this >>>>>>>> might be a warm-up issue. >>>>>>>> >>>>>>>> For clarity, I’m running what I believe to be the newest public >>>>>>>> release of the JDK/JRE. I’m on OS X Yosemite. When I run java -version >>>>>>>> I get this: >>>>>>>> >>>>>>>> java version "1.8.0_25" >>>>>>>> Java(TM) SE Runtime Environment (build 1.8.0_25-b17) >>>>>>>> Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) >>>>>>>> >>>>>>>> Github release: https://github.com/MacPhage/chisel/releases/tag/v0.0.1 >>>>>>>> <https://github.com/MacPhage/chisel/releases/tag/v0.0.1> >>>>>>>> <https://github.com/MacPhage/chisel >>>>>>>> <https://github.com/MacPhage/chisel>> >>>>>>>> Binaries (direct ZIP): chisel-0.0.1-bundle.zip >>>>>>>> <https://github.com/MacPhage/chisel/releases/download/v0.0.1/chisel-0.0.1-bundle.zip >>>>>>>> >>>>>>>> <https://github.com/MacPhage/chisel/releases/download/v0.0.1/chisel-0.0.1-bundle.zip>> >>>>>>>> Source code (direct ZIP): Source code (zip) >>>>>>>> <https://github.com/MacPhage/chisel/archive/v0.0.1.zip >>>>>>>> <https://github.com/MacPhage/chisel/archive/v0.0.1.zip>> >>>>>>>> Github source code at specified commit: >>>>>>>> https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22 >>>>>>>> >>>>>>>> <https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22><https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22 >>>>>>>> >>>>>>>> <https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> If you have any more questions regarding my setup, please tweet me >>>>>>>> @au5ton <https://twitter.com/au5ton <https://twitter.com/au5ton>> or >>>>>>>> email [email protected] <mailto:[email protected]> . >>>>>>>> >>>>>>>> >>>>>>>> ------------ >>>>>>>> >>>>>>>> Austin Jackson >>>>>>>> [email protected] <mailto:[email protected]> >>>>>>>> <mailto:[email protected] <mailto:[email protected]>> >
