I've seen similar problems with Groovy 3.x/4.x when upgrading Apache TinkerPop (we've had to revert from it to 2.5.x and without an improvement I don't see how upgrade will be possible in the future). I had a specific context we were dealing with in groovysh but I sense it is not limited there. I described that issue in what I think was reasonable detail:
https://issues.apache.org/jira/browse/GROOVY-9785 Perhaps that ticket, if deemed related, could be the basis for a wider discussion on this issue? I was unaware of the performance guide, though I believe I came across some of those settings under my own discovery. I will have to check. I can update that ticket with any fresh findings. On Thu, Oct 14, 2021 at 7:32 AM Paul King <pa...@asert.com.au> wrote: > Hi mg, > > Antlr4 performance is something we want to work much more on but it isn't > an easy task and we have already picked off some of the low-hanging fruit. > > It is probably worth creating a Jira ticket for this. We tend to progress > much more efficiently on well-defined issues than broad ones, but perhaps > we need a broad one and can carve off some specific points. > > In the meantime, does the performance guide doco help at all: > > https://github.com/apache/groovy/blob/master/src/spec/doc/performance-guide.adoc > In particular, does trying to use the SLL mode help for your scenario. It > generally only works for simple DSL code but offers a great parsing > performance boost when it does. > The caching parameters and parallel options are also potential things to > try but gains vary widely depending on your scenario. > > Cheers, Paul. > > > On Thu, Oct 14, 2021 at 9:24 AM MG <mg...@arscreat.com> wrote: > >> Hi, >> >> we have spiked using Groovy 4.0.0-beta-1 with our Groovy framework, to >> see if the GString improvements would lead to a speedup in our SQL >> generation code (typically this is irrelevant, and performance is solely >> decided by SQL optimizations, but we have recently come across a few cases >> in practice where performance was not bound SQL execution but by the SQL >> generating code itself). >> >> We had to find workarounds for a few problems (tickets coming), but >> overall it was much faster/hassle free to get Groovy 4 up and running >> compared to our recent switch to from Froovy 2.5 to 3, which was nice :-) >> >> Alas performance-wise what we surprisingly found was, that the >> performance of our main web application dropped by a factor of 2 (table >> refresh) to 3 (startup). >> Executing our test suite showed a similar picture. Since no immediate >> source for this performance drop emerged, we checked the performance of >> Groovy 3 Indy, more to rule out that the performance reduction had >> something to do with invokedynamic; >> as can be seen in the table below, to our surprise performance >> degradiation of Groovy 3.0.9 with full invokedynamic (Groovy JARs & >> IntelliJ compiler switch/checkbox active) was in fact in most cases close >> to the one seen with Groovy 4.0.0-beta-1, pointing to invokedynamic as the >> potential cause. >> >> Right now it looks to us, as if Groovy with invokedynamic for us is just >> "leaking performance everywhere", with no clear source. >> Speed changes range from about 0.6 (i.e. a speedup) to about 5.0, with a >> large bias towards a slowdown by a factor of 2.0 to 2.5. The overall time >> of the test suite increased by a factor of 2.37 (G3 Indy) and 2.45 (G4) >> respectively. >> >> Any ideas what could be the cause of this unexpected slowdown or where we >> should put our focus in analyzing this, to create a test case independent >> of our framwork ? >> >> Cheers, >> mg >> >> >> *Groovy 3.0.9 [s]* *Groovy 3.0.9 INDY [s]* *Groovy 4.0.0-beta-1 [s]* >> *G3INDY/G3 >> Ratio* *G4/G3 Ratio* >> 3038 7200 7440 2.37 2.45 >> 160.146 482.584 467.058 3.01 2.92 >> 115.595 388.332 387.82 3.36 3.35 >> 88.955 141.595 142.205 1.59 1.60 >> 94.743 139.676 138.553 1.47 1.46 >> 65.338 109.143 130.918 1.67 2.00 >> 117.108 129.789 116.748 1.11 1.00 >> 74.182 115.142 110.801 1.55 1.49 >> 30.653 104.733 101.138 3.42 3.30 >> 24.71 80.171 72.541 3.24 2.94 >> 22.586 59.167 60.043 2.62 2.66 >> 41.302 46.675 46.682 1.13 1.13 >> 5.34 51.456 46.045 9.64 8.62 >> 14.066 41.788 43.987 2.97 3.13 >> 20.535 42.441 42.571 2.07 2.07 >> 19.582 43.338 42.493 2.21 2.17 >> 19.937 43.235 42.361 2.17 2.12 >> 23.118 40.245 42.206 1.74 1.83 >> 14.777 34.526 33.725 2.34 2.28 >> 15.23 31.757 33.302 2.09 2.19 >> 15.813 34.246 30.699 2.17 1.94 >> 18.743 33.892 30.436 1.81 1.62 >> 14.855 30.105 27.19 2.03 1.83 >> 10.775 28.514 25.813 2.65 2.40 >> 10.571 26.344 23.289 2.49 2.20 >> 8.084 21.218 21.675 2.62 2.68 >> 9.155 21.571 21.299 2.36 2.33 >> 5.454 18.296 19.425 3.35 3.56 >> 12.987 18.841 18.537 1.45 1.43 >> 10.928 17.93 17.987 1.64 1.65 >> 10.501 9.792 14.374 0.93 1.37 >> 9.455 14.174 14.038 1.50 1.48 >> 3.19 12.39 13.79 3.88 4.32 >> 10.006 13.961 13.264 1.40 1.33 >> 22.858 14.48 13.073 0.63 0.57 >> 4.592 10.176 12.777 2.22 2.78 >> 8.991 12.932 11.908 1.44 1.32 >> 17.245 10.591 10.746 0.61 0.62 >> 2.331 11.443 10.497 4.91 4.50 >> 11.159 10.205 9.911 0.91 0.89 >> 2.362 20.721 9.744 8.77 4.13 >> 9.369 7.543 9.097 0.81 0.97 >> 1.845 9.353 8.483 5.07 4.60 >> 4.647 5.537 8.065 1.19 1.74 >> 8.758 8.806 7.664 1.01 0.88 >> 10.359 9.95 7.657 0.96 0.74 >> 8.954 8.764 7.38 0.98 0.82 >> 2.424 7.37 6.941 3.04 2.86 >> 6.75 6.771 6.84 1.00 1.01 >> 7.476 5.179 6.679 0.69 0.89 >> 1.873 6.785 6.64 3.62 3.55 >> 8.13 5.896 6.564 0.73 0.81 >> 6.892 5.189 6.385 0.75 0.93 >> 5.91 6.153 6.2 1.04 1.05 >> 1.318 4.944 5.585 3.75 4.24 >> >