I've created: https://issues.apache.org/jira/browse/GROOVY-9785
On Tue, Oct 20, 2020 at 6:40 AM Paul King <pa...@asert.com.au> wrote: > Hi Stephen, sounds like it can't hurt. > > Cheers, Paul. > > > On Tue, Oct 20, 2020 at 8:23 PM Stephen Mallette <spmalle...@gmail.com> > wrote: > >> Would it help if I created a ticket in JIRA and uploaded the JFRs I had? >> Perhaps someone could take a look and either see an easy fix or point me in >> the right direction toward one? >> >> On Mon, Oct 19, 2020 at 7:43 PM Daniel Sun <sun...@apache.org> wrote: >> >>> >>> I think the performance issue could be related to groovysh but not the >>> new parser. >>> Here the result of running my script[1], as you could see, it works well: >>> ``` >>> D:\_TEMP\yyy>groovy Test.groovy >>> result: 5500; elapsed time: 261ms >>> >>> D:\_TEMP\yyy>groovy Test.groovy >>> result: 5500; elapsed time: 240ms >>> >>> D:\_TEMP\yyy>groovy Test.groovy >>> result: 5500; elapsed time: 275ms >>> >>> D:\_TEMP\yyy>groovy Test.groovy >>> result: 5500; elapsed time: 249ms >>> >>> D:\_TEMP\yyy>groovy Test.groovy >>> result: 5500; elapsed time: 259ms >>> >>> D:\_TEMP\yyy>groovy -v >>> Groovy Version: 3.0.6 JVM: 15 Vendor: Azul Systems, Inc. OS: Windows 10 >>> ``` >>> >>> Cheers, >>> Daniel Sun >>> >>> [1] my script: >>> ``` >>> def begin = System.currentTimeMillis() >>> >>> // 500 lines of "1 + 10 +" >>> def result = new GroovyShell().evaluate ''' >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 + >>> 1 + 10 >>> ''' >>> >>> def end = System.currentTimeMillis() >>> >>> println "result: $result; elapsed time: ${end - begin}ms" >>> >>> ``` >>> >>> >>> On 2020/10/19 11:06:25, Stephen Mallette <spmalle...@gmail.com> wrote: >>> > I was using 3.0.6 actually (I'd downloaded it to make sure that it >>> wasn't >>> > our extension of groovysh that was causing some difference). But to be >>> > sure, I just retested it on 3.0.6 and 2.5.13. I built a 500 line >>> script of >>> > "addition". For 2.5.13 I got: >>> > >>> > groovy:000> start = System.currentTimeMillis() >>> > ===> 1603105239050 >>> > groovy:000> 1 + 10 + >>> > groovy:001> 1 + 10 + >>> > groovy:002> 1 + 10 + >>> > groovy:003> 1 + 10 + >>> > groovy:004> 1 + 10 + >>> > groovy:005> 1 + 10 + >>> > groovy:006> 1 + 10 + >>> > ... >>> > groovy:495> 1 + 10 + >>> > groovy:496> 1 + 10 + >>> > groovy:497> 1 + 10 >>> > ===> 5478 >>> > groovy:000> System.currentTimeMillis() - start >>> > ===> 1193 >>> > >>> > and on 3.0.6 I got: >>> > >>> > groovy:000> start = System.currentTimeMillis() >>> > ===> 1603105244825 >>> > groovy:000> 1 + 10 + >>> > groovy:001> 1 + 10 + >>> > groovy:002> 1 + 10 + >>> > groovy:003> 1 + 10 + >>> > groovy:004> 1 + 10 + >>> > groovy:005> 1 + 10 + >>> > groovy:006> 1 + 10 + >>> > ... >>> > groovy:495> 1 + 10 + >>> > groovy:496> 1 + 10 + >>> > groovy:497> 1 + 10 >>> > ===> 5478 >>> > groovy:000> System.currentTimeMillis() - start >>> > ===> 31876 >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > On Mon, Oct 19, 2020 at 6:40 AM Daniel Sun <sun...@apache.org> wrote: >>> > >>> > > >>> > > Please try 3.0.6+, we have tuned the performance a lot. >>> > > >>> > > Cheers, >>> > > Daniel Sun >>> > > On 2020/10/16 18:58:28, Stephen Mallette <spmalle...@gmail.com> >>> wrote: >>> > > > Hello, >>> > > > >>> > > > I happened to be testing some issues related to this pull request I >>> > > > submitted the other day: >>> > > > >>> > > > https://github.com/apache/groovy/pull/1405 >>> > > > >>> > > > In testing between groovy 2.5.x and 3.x I've noticed a considerable >>> > > > performance difference when pasting long multi-lined scripts. >>> 2.5.x is >>> > > > quite quick to accept the input whereas 3.x seems to slow more and >>> more >>> > > as >>> > > > additional lines are consumed. While I did more complex tests >>> trying to >>> > > get >>> > > > to the bottom of the problem, it's fairly easy to recreate with a >>> simple >>> > > > addition script: >>> > > > >>> > > > 1 + 10 + >>> > > > 1 + 10 + >>> > > > 1 + 10 + >>> > > > 1 + 10 + >>> > > > 1 + 10 + >>> > > > ... repeated a bunch of times and then ended with >>> > > > 1 >>> > > > >>> > > > copy that out of your text editor and just paste it into both >>> versions of >>> > > > groovsh and see the difference. I've found 500 lines demonstrates >>> it well >>> > > > but you could probably get away with less and still see the >>> difference of >>> > > > evaluation at play. >>> > > > >>> > > > I tried to do some profiling to try to isolate the problem myself, >>> but >>> > > > things got a little too deep into antlr4 for me and I got lost. >>> Does >>> > > anyone >>> > > > have any ideas as to what might be different for 3.x? >>> > > > >>> > > >>> > >>> >>