bug 6693236 fix

Rémi Forax forax at univ-mlv.fr
Thu Jul 8 06:13:30 PDT 2010

Le 08/07/2010 14:07, Keith McGuigan a écrit :
> David Holmes wrote:
>> Rémi Forax said the following on 07/08/10 19:55:
>>> Hi David,
>>> I've no problem with the fact that the default configuration of jdk7
>>> mandate to use of the split verifier.
>>> But the patch for bug 6693236 also make FailOverOldVerifier command 
>>> line flag useless.
>>> I think it's an error. FailOverOldVerifier should "fail over the old 
>>> verifier" and not be silently ignored.
>> For Java 7 you're not permitted to failover to the old verifier so 
>> the choices are to:
>> a) silently ignore it
>> b) ignore it but issue a warning
>> c) refuse to start the VM
>> I presume you would prefer (b) or (c)?
> At startup time, the JVM doesn't know what kind of classfiles it's 
> going to load.  It doesn't get fed a steady diet of same-versioned 
> classfiles.  Failover is still an option for classfiles with classfile 
> version 50.
> So it's really not being ignored, it still enables failover for old 
> classfile versions.  Just not the new ones.
> -- 
> - Keith

Hi Keith,
The problem is that bytecode transformations at runtime is a common trick,
especially since the VM has an agent API (java.lanf.instrumentation).
Such agents modify the bytecode at runtime by rewritting it.
During the rewrite, the stackmap information are often discarded,
because the agent was written before the release of 1.6 or
because generating stackmap frames takes more time than using
the old verifier.

With this fix, these agent libraries will stop working with 1.7 classfiles
and there is no workaround until the agent code is updated.


More information about the hotspot-runtime-dev mailing list