Hi Richard,

I noticed that VM_EnterInterpOnlyMode makes all compiled methods on stack 
not_entrant. To me this
seems unnecessary. I think it would be sufficient to patch the return pc of 
compiled frames and
let them return to their deopt handler. Or what would be the reason to make the 
compiled methods
not_entrant?

VM_EnterInterpOnlyMode::doit(): all compiled methods on stack that are not 
native methods get
marked.

Deoptimization::deoptimize_all_marked(): all marked methods are made 
not_entrant.

Maybe this is for historical reasons? If I remember correctly, many years ago, 
deoptimizing a
compiled frame used to require making the corresponding nmethod not_entrant. 
And making a nmethod
not_entrant meant overriding its code with a slide of nops that led to the 
deopt handler.

I'd like to change this and just apply Deoptimization::deoptimize() on every 
compiled frame on
stack. I've done this locally and tested the change without issues.

I'm not a JVMTI expert, but considering VM_EnterInterpOnlyMode is performed on per-thread basis [1], it looks like per-frame deoptimization (instead of per-nmethod) should be enough to do the job.

So, from JIT-compiler perspective, your suggestion to use Deoptimization::deoptimize() instead of CompiledMethod::mark_for_deoptimization()/Deoptimization::deoptimize_all_marked() sounds good.

PS: also, it looks like handshakes become a perfect fit for VM_EnterInterpOnlyMode: once you don't need to deoptimize on per-nmethod basis, there's no need to trigger global safepoint.

Best regards,
Vladimir Ivanov

[1] http://hg.openjdk.java.net/jdk/jdk/file/tip/src/hotspot/share/prims/jvmtiEventController.cpp#l227

    // If running in fullspeed mode, single stepping is implemented
    // as follows: first, the interpreter does not dispatch to
    // compiled code for threads that have single stepping enabled;
    // second, we deoptimize all methods on the thread's stack when
    // interpreted-only mode is enabled the first time for a given
    // thread (nothing to do if no Java frames yet).

Reply via email to