Request for reviews (M): 6833129 : specjvm98 fails with NullPointerException in the compiler with -XX:DeoptimizeALot

Vladimir Kozlov Vladimir.Kozlov at Sun.COM
Mon Jul 6 15:49:19 PDT 2009

I would put "restart" variable at the same scope as
the call since it is not used in

I would add a comment about new decoding/encoding in

The new code in src/share/vm/opto/bytecodeInfo.cpp
should be an assert (not the flag setting) since
the restart bytecode should be the top frame.
assert(!caller_jvms->is_restart(), "there should be no restart bytecode with inlining");

Also in src/share/vm/opto/callnode.hpp add an assert
to check that bci is no changed when _restart is set
void set_bci(int bci) { assert(!_restart, ""); _bci = bci; }

We talked about using  PreserveJVMState pjvms(this) instead
of restoring stack and restart flag in intrinsics?
Why you did not use it?


changpeng fang - Sun Microsystems - Santa Clara United States wrote:
> Problem:
> The problem is in intrinsics Object.clone and Arrays.copyOf. When 
> de-optimization occurs on the slow path for array/instance
> allocation, the Interpreter will continue execution in next bc after the 
> slow allocation calls without actual copying.
> Solution:
> Add a restart bit in debuginfo to direct the deopt to restart execution 
> of the bytecode  that invokes  Object.clone/Arrays.copyOf.
> The restart bit is set up in Inline Intrinsics of 
> Object.clone/Arrays.copyOf.
> Tests:
> Passed specjvm98, JPRT and the test case of clone in the bug report.
> Thanks,
> Changpeng

More information about the hotspot-compiler-dev mailing list