Hotspot loves PHP.reboot

Thomas Wuerthinger thomas.wuerthinger at oracle.com
Thu Sep 8 16:06:09 PDT 2011


On 08.09.2011 21:47, John Rose wrote:
> On Sep 8, 2011, at 4:57 AM, Thomas Wuerthinger wrote:
>
>> Why not the following code pattern? Does it generate too many bytecodes?
>
> That's a reasonable alternative.
>
> It generates data movement bytecodes O(L * M), where L is the average 
> number of live values at deopt points and M is the number of deopt 
> points.  The quadratic exponent on bytecode size bothers me, at least 
> a little.

But with a specialized DeoptimizeException that automatically captures 
the values of the local variables and operand stack at the JVM-level (in 
fillInStackTrace), there would not be any data movement bytecodes at 
all. It would require a 1-1 correspondance between scripting language 
local variables and Java bytecode local variables, but would both be 
efficient to generate and performant at run time. The information could 
be captured for all stack frames between the throwing method and the 
catching method. Here an example for a scripting method that performs 
a+b and is guessed to not overflow.

Object add(int a, int b) {
    try {
          return fastPathAdd(a, b);
     } catch(DeoptimizationException e) {
         Integer local1 = e.getTopFrame().getLocalAt(0);
         Integer local2 = e.getTopFrame().getLocalAt(1);
         return slowPathAdd(local1, local2);
     }
}

int fastPathAdd(int a, int b) {
    if (canOverflow(a, b)) throw new DeoptimizationException();
    return a + b;
}

Object slowPathAdd(Object a, Object b) {
   // ... generic add implementation ...
}


- thomas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/mlvm-dev/attachments/20110909/a18c8b38/attachment.html 


More information about the mlvm-dev mailing list