On 02/12/2015 11:39, Michael Rasmussen wrote:
:
A further question for JVMTI in this regard:
ClassFileLoadHook callback seems to not be called before VMInit anymore?
I know the documentation is vague on this point, only specifying that
it may be sent in primordial phase; but for previous JDK versions, this
event is sent for all classes being loaded, even java.lang.Object; where
as on jdk9, the first class I get event for, is what I'm trying to load
in my VMInit callback.
This is what we have in JEP 261:
"JVM TI agents can no longer instrument Java code that runs early in the
startup of the run-time environment. The vm start event is not sent
until the module system is initialized, so JVM TI agents that do
load-time instrumentation will not receive ClassFileLoadHook events for
classes loaded during startup and they will also miss some
previously-received CompiledMethodLoad and DynamicCodeGenerated events.
Agents can use the GetLoadedClasses function to get the list of loaded
classes and the GenerateEvents function to generate missed events. (Java
agents will continue to function as before, since they run only during
the live phase.)"
So you won't see CFLH events until the Start phase.
I think this can be re-visited once there is support for "module aware"
agents. The important thing that agents will not be able to load classes
outside the java.base module until the module system has been initialized.
:
The transform method gives you the Class<?> of the class being redefined
so you should be able to invoke getModule() on this to get the module.
Yes, when being redefined; but for the initial load/transformation, this
argument is null, since the class obviously hasn't been defined yet, but
the module in which it's being loaded should be (disregarding java.base
classes being loaded before module system is initialized, since this is
before premain, thus before you can add a instrumentation transformer).
Fair point, it will be NULL when it's a class load so it would require
CFT to define a new transform method.
Just on steps to update these APIs for modules then we should have an
initial patch soon to help debugger agents. This has wider scope because
it requires updates to JVM TI, JDWP and JDI. We need to work on
instrumentation support too so use-cases, examples, and working with us
to get this right would be great.
-Alan