On Thu, 10 Jul 2025 03:12:27 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> The VM option -XX:AllowRedefinitionToAddDeleteMethods was added in JDK 13 as 
>> a temporary backward compatibility flag under JDK-8192936 and was 
>> immediately marked as Deprecate. The fix is to obsolete this option in JDK 
>> 26 and expire in JDK 27.
>> 
>> TBD: Need to submit a related CSR.
>> 
>> There are two concerns which may require some negotiation with the Runtime 
>> (@coleenp @dcubed-ojdk @dholmes-ora) and SQE (@lmesnik) teams:
>>  - Class redefinition/retransformation can impact lambda expressions which 
>> are supported with private methods
>>  - Many tests depend on this VM option and are being removed. I'm not sure 
>> if it is okay to completely remove those e may want another way to handle 
>> this (e.g. problem-listing the impacted tests for now).
>>  
>> Testing:
>>  - mach5 tiers 1-6 are good
>>  - may need to run mach5 tiers > 6
>
> Serguei Spitsyn has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   corrected one assert message

This involved a lot more code than I had envisaged.

The test situation seems problematic as it suggests to me that we have required 
functionality (redefine a method containing a lambda expression) that is not 
possible without the flag. And it seems this flag is also being used in the 
wild e.g.

https://blog.picnic.nl/embracing-java-17-heres-what-we-learned-69779d95fdf2

> As of Java 16, JDK internals are strongly encapsulated by default ([JEP 
> 396](https://openjdk.java.net/jeps/396)). These and other changes mean that 
> some dependencies now 
> [require](https://github.com/reactor/BlockHound/issues/33) additional JVM 
> flags such as --add-opens and -XX:+AllowRedefinitionToAddDeleteMethods to 
> function properly. We updated our shared build system such that teams can 
> configure these flags in a single place, ensuring that test and production 
> runtimes remain in sync.

With more info in https://github.com/reactor/BlockHound/issues/33

So I am quite concerned that this "workaround" has become entrenched.

src/hotspot/share/prims/jvmtiRedefineClasses.cpp line 4053:

> 4051: }
> 4052: 
> 4053: void VM_RedefineClasses::compute_matching_methods() {

I can't see that this method actually still does anything useful. ??

src/hotspot/share/runtime/arguments.cpp line 525:

> 523:   // -------------- Deprecated Flags --------------
> 524:   // --- Non-alias flags - sorted by obsolete_in then expired_in:
> 525:   { "AllowRedefinitionToAddDeleteMethods", JDK_Version::jdk(13), 
> JDK_Version::jdk(26), JDK_Version::jdk(27) },

Please move this line to before line 535 (ParallelRefProcEnabled) so that we 
are sorted on obsolete_in as required.

-------------

PR Review: https://git.openjdk.org/jdk/pull/26232#pullrequestreview-3004272187
PR Review Comment: https://git.openjdk.org/jdk/pull/26232#discussion_r2196808392
PR Review Comment: https://git.openjdk.org/jdk/pull/26232#discussion_r2196813023

Reply via email to