Hi Gabriel,

1. I checked our configuration, and we used the following line in our
   Groovy configuration file:
    1. configuration.optimizationOptions.indy = false // Disable
       invoke-dynamic (indy) usage
2. If you don't have a Groovy config file in your project yet:
    1. For our IntelliJ build it suffices to put a file named e.g.
       groovycConfig.groovy in our project (which in your case only
       needs to contain the line abve (no imports)).
    2. Then tell IntelliJ under Settings\Groovy Compiler\Path to
       configscript where the file is located.
    3. If you use Gradle, Maven, etc you will have to check where the
       file needs to go.

Cheers,
mg


On 01/03/2024 23:30, Videla, Gabriel wrote:
Thanks MG and Jochen for your explanations.

If we manage to identify the part of our code with the performance issue we'll let you know.

    you can switch to Groovy 4 for now, if you tell it to use the old
    mechanism (I can't remember the setting, it was in one of Paul's
    replies)...


Paul, can you point me to this setting? I did a search but couldn't find it. It would help meanwhile since there are some fixes in Groovy 4 that are not present in Groovy 3. Thanks.
------------------------------------------------------------------------
*From:* MG <mg...@arscreat.com>
*Sent:* Saturday, February 24, 2024 2:11 AM
*To:* dev@groovy.apache.org <dev@groovy.apache.org>; Videla, Gabriel <gvid...@ptc.com>; pa...@asert.com.au <pa...@asert.com.au>
*Subject:* Re: Performance in Groovy 5

        
You don't often get email from mg...@arscreat.com. Learn why this is important <https://aka.ms/LearnAboutSenderIdentification>
        

Hi Gabriel,

 1. that post about Groovy 3 -> 4 performance degradation was from me.
 2. The performance degradation in our case was definitely due the
    JVM's dynamic call resolution ("indy") being used over Groovy's
    own implementation.
 3. It actually occurs the same in Groovy 3 when switched to using
    indy (Groovy 3 defaults to the old mechanism, whereas Groovy 4
    defaults to using indy).
 4. So you can test this by forcing Groovy 3 to use indy, and check if
    the same performance degradation occurs.
     1. The rest of the mail assumes that it does, due to:
         1. This was the only performance problem we ran into, and
            ours is a larg application doing varied stuff written
            completely in Groovy.
         2. No one else having reported any performance issues afaiaao.
 5. So you can switch to Groovy 4 for now, if you tell it to use the
    old mechanism (I can't remember the setting, it was in one of
    Paul's replies)...
     1. ...but that solution will run out of steam at some point,
        since the old Groovy callsite resolution mechanism will be
        blocked by future Java VMs, so at some point in the future
        Groovy will be "indy" only.
 6. In our case, in the end we were able to refactor our code, trading
    some usability of our in-house framework for creating less short
    lived temporary objects on the heap, thereby getting back to
    expected performance, and are now running on the latest Groovy 4.
 7. It took quite some time & effort to pinpoint where exactly those
    "too many objects" where created, since, as it turned out, it
    where objects representing database Table references for our SQL
    generator, of which a lot /do /get created for a short time - just
    in this one case "a lot" turned out to be orders above other code
    parts, in a non-obvious way.
 8. So if you want to fix this on your side, the advice I can give is
    to try to isolate a relatively small code segment that can be used
    as a test case to drill further down & isolate the code part /
    library that causes the creation of a (very) large number of
    (temporary) objects.
     1. Once you have found this, hopefully you will be able to reduce
        the number of objects created.,
     2. As I said we did not get lucky & had to accept a workaround,
        but in theory you might find that creatings so many objects is
        actually a bug ;-)
 9. On the Groovy side of things there was some activity on this a
    short while ago, and I am also waiting on some update, to see if
    we will be able to go back to our older, more convenient
    implementation... :-)

Cheers,
mg



On 23/02/2024 23:30, Videla, Gabriel wrote:

    We are working on several aspects which will improve performance.
    We'll be sure to add further details in the release notes if
    everything goes to plan.


Good to know, thanks.

    Is there a particular aspect of performance that is of particular
    importance to you?


Our application was upgraded to Groovy 4 but after a performance test showed it was slower we had to go back to Groovy 3. I did a search and found a discussion[1] of someone who also noticed degradation when trying to use Groovy 4. Indy code was suggested as a possible cause but no conclusion was reached. I also noticed that the Groovy 4 release notes[2] mentions that there were numerous speed improvements because previously "indy" code was noticeably slower than "classic" bytecode.

1. https://lists.apache.org/thread/8vn8h2w8rpxmyz58bjqtkxmcwv2o6trp <https://lists.apache.org/thread/8vn8h2w8rpxmyz58bjqtkxmcwv2o6trp> 2. https://groovy-lang.org/releasenotes/groovy-4.0.html#:~:text=Classic%20bytecode%20generation%20removal <https://groovy-lang.org/releasenotes/groovy-4.0.html#:~:text=Classic%20bytecode%20generation%20removal>
------------------------------------------------------------------------
*From:* Paul King <pa...@asert.com.au> <mailto:pa...@asert.com.au>
*Sent:* Thursday, February 22, 2024 2:15 AM
*To:* dev@groovy.apache.org <mailto:dev@groovy.apache.org> <dev@groovy.apache.org> <mailto:dev@groovy.apache.org>
*Cc:* Videla, Gabriel <gvid...@ptc.com> <mailto:gvid...@ptc.com>
*Subject:* Re: Performance in Groovy 5
[You don't often get email from pa...@asert.com.au <mailto:pa...@asert.com.au>. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification <https://aka.ms/LearnAboutSenderIdentification> ]

Hi Gabriel,

We are working on several aspects which will improve performance.
We'll be sure to add further details in the release notes if
everything goes to plan. Is there a particular aspect of performance
that is of particular importance to you?

Cheers, Paul.

On Thu, Feb 22, 2024 at 8:01 AM Videla, Gabriel <gvid...@ptc.com> <mailto:gvid...@ptc.com> wrote:
>
> Hi Groovy devs
>
> I was wondering if we should expect some performance improvements in Groovy 5 compared to Groovy 4. I checked the release notes[1] and changelogs[2] for Groovy 5 and I didn't see any clear reference to performance improvements so I thought of asking here.
>
> Thanks
> Gabriel
>
> 1. https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroovy-lang.org%2Freleasenotes%2Fgroovy-5.0.html&data=05%7C02%7Cgvidela%40ptc.com%7C6388346a435f44bd5bda08dc3343bf23%7Cb9921086ff774d0d828acb3381f678e2%7C0%7C0%7C638441613280211984%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=ijZyZ561gzqKcrGIOHXM9rbp0x0YZ6GLib8ITwtvTnU%3D&reserved=0 <https://groovy-lang.org/releasenotes/groovy-5.0.html> > 2. https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroovy-lang.org%2Fchangelogs%2Fchangelog-5.0.0-unreleased.html&data=05%7C02%7Cgvidela%40ptc.com%7C6388346a435f44bd5bda08dc3343bf23%7Cb9921086ff774d0d828acb3381f678e2%7C0%7C0%7C638441613280222351%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=703JVhRhXeyHaQKfhtL7Md5B6JnUJWKk6FSpvm317nU%3D&reserved=0 <https://groovy-lang.org/changelogs/changelog-5.0.0-unreleased.html>

Reply via email to