RFC (csr): 8221528: Introduce compatibility mode with VM option -XX:AllowRedefinitionToAddOrDeleteMethods
Thomas Stüfe
thomas.stuefe at gmail.com
Thu Mar 28 06:55:34 UTC 2019
On Thu, Mar 28, 2019 at 8:40 AM David Holmes <david.holmes at oracle.com>
wrote:
> Hi Thomas,
>
> On 28/03/2019 5:02 pm, Thomas Stüfe wrote:
> > Hi Serguei,
> >
> > This is planned to be introduced in jdk 13?
> >
> > The only concern I have is that both paths (old and new behavior) should
> > be well tested, and hiding the old behavior behind an optional switch
> > may reduce its test coverage considerably.
>
> The old behaviour is hardly ever used - I'm not even sure we currently
> have a test that tries to use it - so it's already not "well tested" and
> there's no intent here of increasing test coverage for the code we plan
> to remove. The new path will be tested as we do have a test that expects
> to get the error. And Serguei will of course have a simple test that
> checks the flag with both values.
>
I remember at least one case causing crashes in our code base where the
method ordering array was not reordered on RedefineClasses. May have been
this one: JDK-8149743.
My point is, I have seen crashes in the field coming from bytecode agents
redefining classes with method added or substracted, so it is no
theoretical problem.
Cheers Thomas
>
> Cheers,
> David
>
>
> > Cheers, Thomas
> >
> > (p.s. html format does not work well with the OpenJDK mailing list
> > archive, see
> >
> https://mail.openjdk.java.net/pipermail/serviceability-dev/2019-March/027612.html
> )
> >
> > On Thu, Mar 28, 2019 at 1:57 AM serguei.spitsyn at oracle.com
> > <mailto:serguei.spitsyn at oracle.com> <serguei.spitsyn at oracle.com
> > <mailto:serguei.spitsyn at oracle.com>> wrote:
> >
> > Hi All,
> >
> > This is request for comments and potentially reviews for the
> > following CSR:
> > https://bugs.openjdk.java.net/browse/JDK-8221528
> >
> >
> > *Problem*
> >
> > Now, the implementation of JVMTI RedefineClasses and
> > RetransformClasses allows to
> > add/delete private static and private final instance methods in the
> > new class versions.
> >
> > It means that current implementation does not follow the JVM TI spec
> > which explicitly states:
> >
> > "The redefinition must not add, remove or rename fields or methods,
> > change the signatures
> > of methods, change modifiers, or change inheritance."
> >
> > For details, please, see the spec:
> >
> >
> https://docs.oracle.com/en/java/javase/12/docs/specs/jvmti.html#RedefineClasses
> >
> https://docs.oracle.com/en/java/javase/12/docs/specs/jvmti.html#RetransformClasses
> >
> > The decision was made to align the implementation with the spec.
> > For reference, please, see the
> > https://bugs.openjdk.java.net/browse/JDK-8192936.
> >
> > This decision is going to cause some inconveniences to the customers.
> >
> >
> > *Solution*
> >
> > The solution is to introduce a compatibility mode with new
> > command-line VM option:
> > -XX:{+|-}AllowRedefinitionToAddOrDeleteMethods
> >
> > New option will enable old behavior and allow the JVM TI
> > RedefineClasses and RetransformClasses
> > to add/delete private static and private final instance methods in
> > the new class versions.
> > Without this option the old behavior will be disabled.
> >
> > New option is deprecated right away.
> > The plan is to keep it for a couple of releases to allow customers
> > (tool vendors)
> > to remove dependency on old behavior from their tools.
> >
> > Thanks,
> > Serguei
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20190328/3d20141e/attachment.html>
More information about the serviceability-dev
mailing list