Hello James, LLMs really suck at concurrency, it's their kryptonite. By example, in the first two lines https://github.com/apache/groovy/pull/2374/changes#diff-9509de7dd59037252adc9ad813535d0a5ce8c0b4960eaba0efae6ccafbbc43f1R43
Having two volatiles means that a thread can see on field being updated while the other is not yet updated, and storing the class as a String will not work once ClassLoaders are involved (you can more than one class with the same name). regards, Rémi ----- Original Message ----- > From: "James Fredley" <[email protected]> > To: "dev" <[email protected]>, [email protected] > Sent: Thursday, January 29, 2026 12:16:13 AM > Subject: Draft PR: GROOVY-10307: Improve invokedynamic performance with > optimized caching > I have submitted a draft PR which significantly improves invokedynamic > performance in Grails 7 with Groovy 4, while passing the tests in the > Groovy build. > > Optimizing Indy performance is well outside my expertise, but I'm > hopeful this PR will help pave the way for better optimizations for > Groovy-based applications like Grails, where frequent metaclass > modifications currently invalidate all call sites leading to slower > execution. > > https://github.com/apache/groovy/pull/2374 > > James Fredley
