Difference between redefineClasses and retransformClasses?

Alan Bateman Alan.Bateman at Sun.COM
Fri May 23 05:31:17 PDT 2008


Bastian Helfert wrote:
> Hello everybody,
>
> I re-read the API documentation for 
> /java.lang.instrument.Instrumentation/ over and over again, but I 
> could not figure out what the (main) difference is between the methods 
> /redefineClasses/ and /retransformClasses/.
>
> Imagine I have multiple agents that (re)transform the bytecode of the 
> same class. By using /retransformClasses/ the current definition of 
> the class is passed to the transform method.
> But could not I also read the current class file bytes and instrument 
> them, e.g. by using a bytecode manipulation library, /before /I pass 
> these bytes to /redefineClasses/?
>
> Hence, what can I do with /retransformClasses/ that I cannot also do 
> with /redefineClasses/? Or is /retransformClasses/ actually "API 
> sugar"? When would I use what method?
The main recommendation is to use retransformClasses if you are doing 
instrumentation. The redefineClasses method is more intended for 
fix-and-continue and other cases where the class definition needs to be 
replaced. 

The main motivation and benefit of retransformClasses is that it allows 
multiple instrumentation agents to co-exist. Each agent's transformer 
gets to instrument the class in turn. Removing instrumentation becomes 
significantly easier as the retransformClasses starts with the initial 
bytes.

Does does help?

-Alan.









More information about the serviceability-dev mailing list