Methods Summary |
---|
public void | addTransformer(java.lang.instrument.ClassFileTransformer transformer)Registers the supplied transformer argument with the VM.
Any classes that are to be defined or re-defined (if supported) in the VM
will then be offered to the transformer for it to carry out any byte code
modifications. The exception to this scheme is if the class to be defined /
re-defined is a dependency of the transformer.
This operation can be carried out multiple times on a concrete
Instrumentation . The order of registration is important
as it defines the order in which the transformers' transformation
operation gets called.
It is possible for any given instance of
ClassFileTransformer to be registered more than once with
this operation.
|
public java.lang.Class[] | getAllLoadedClasses()Returns an array of all of the classes that have been loaded into the VM.
|
public java.lang.Class[] | getInitiatedClasses(java.lang.ClassLoader loader)Returns an array of all of the classes for which loader is
the initiating class loader.
|
public long | getObjectSize(java.lang.Object objectToSize)Returns the number of bytes in memory required by this VM for the
supplied object objectToSize . The returned value should
be taken as an estimation only which is susceptible to change between
separate launches of the VM.
|
public boolean | isRedefineClassesSupported()Returns a boolean indication of whether or not this VM supports the
on-the-fly redefining of classes that have been already loaded.
|
public void | redefineClasses(java.lang.instrument.ClassDefinition[] definitions)Receives an array of {@link ClassDefinition} instances and attempts to
carry out on-the-fly redefining on each of the associated classes.
Redefining in this manner may be used to update the following parts of an
already loaded class:
- attributes
- constant pool
- method implementations
If any invocations of a redefined method are already active in the VM
when this call is made then they will run to completion and be unaffected
by the outcome of this method. Provided the method redefinition is
successful, all subsequent calls on the method will run the new version.
Redefining a class may not be used to make changes to any
other aspects of a previously loaded class such as its inheritance
hierarchy, the names or signatures of any of its methods, the names of
any fields, the values of any static variables etc.
If a class associated with a ClassDefinition is
successfully redefined then there will be no resulting re-run of any of
its initialization code. Similarly, any instances of the class that were
created before the redefining will not be changed in any way. That is,
they will remain in the VM as instances of the previous version of the
class.
Note that before the requested redefinitions are attempted, each
{@link ClassFileTransformer} registered with the VM will be given the
opportunity to carry out their own custom transformations of the new
version of the class.
|
public boolean | removeTransformer(java.lang.instrument.ClassFileTransformer transformer)Removes the most recently added instance of the
ClassFileTransformer object from the VM's list of
registered transformers. After this call completes, the specified
ClassFileTransformer object will no longer have its
transform() method automatically invoked when class definitions or
redefinitions are attempted.
|