hello, I've added some additional analysis to the issue I'd created several months back regarding the performance issues I've been seeing with what I will now term "incomplete multi-line scripts":
https://issues.apache.org/jira/browse/GROOVY-9785 I think the notion of "incomplete" is the key aspect of this issue and why Daniel Sun's attempt to recreate the problem with a script in this thread did not demonstrate a deficiency. I've revised that script and it now demonstrates the issue as I've been seeing. You may find it attached to the JIRA issue. Unfortunately, this is a major issue for Apache TinkerPop and a blocker to our next major release (though we are not rushed as of yet). I know parts of the groovy code base, but the parser and antlr level code is quite unfamiliar to me so I don't immediately see a simple surgical fix. Does anyone have any guidance? On Tue, Oct 20, 2020 at 7:09 AM Stephen Mallette <spmalle...@gmail.com> wrote: > 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? >>>> > > > >>>> > > >>>> > >>>> >>>