[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: RFR: 8200559: Java agents doing instrumentation need a means to define auxiliary classes [v2]
From:       Alexander Kriegisch <duke () openjdk ! org>
Date:       2024-01-30 1:02:49
Message-ID: rZ2TyCYxB7JqMY1RDUGGrQbMywllrhX8QftJ7NqeVIk=.6885eb39-425c-423c-9d7d-2f4e2efebb24 () github ! com
[Download RAW message or body]

On Mon, 29 Jan 2024 14:31:10 GMT, Andrew Dinn <adinn@openjdk.org> wrote:

> > Bytecode transformation should not be rocket science, but it progressively is \
> > developing in that direction.
> 
> Hmm? Bytecode transformation of the JDK runtime implementation is a lot more \
> complicated than your comments seem to acknowledge

That is, because I was not talking about JDK runtime transformation but about what \
the AspectJ weaving agent does: transformation of application classes during \
class-loading.

I am aware of the fact, that it is also possible to retransform already loaded \
classes, as a special case also bootstrap ones from the JRE. Of course, this is more \
complicated than the simple case. But my point was, that even the simple case is not \
simple, if I need to define classes in an arbitrary class loader - not because \
technically it is difficult, but simply because the JRE API to do so is more and more \
sealed off with each new Java release. This is also what I mean, when I said, that \
developers are not treated as adults but "protected" by well-meaning, but ill-doing \
helicopter parents.

> here's the important thing, _it always has been_.

No, byte code transformation is not complicated per se. Getting the transformed \
classes where they need to be is complicated, but artificially so.

> You need to remember that instrumenting JDK runtime code involves rebuilding the \
> engine that you are driving while you are in mid-flight.

No, I do not need to remember, because I am aware of that fact. It is just off-topic \
here with regard to what I asked about. But that other use case, which I have \
experimented with in another context (test mocking and stubbing) in the past, is an \
intriguing one, too. I am not underestimating anything there, but for AspectJ it is \
simply out of scope. Should I ever decide to add the capability to weave aspects into \
JRE classes, of course that will up the complexity by a notch or two.

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

PR Comment: https://git.openjdk.org/jdk/pull/3546#issuecomment-1915860036


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic