RFR: 8146416: java.lang.OutOfMemoryError triggers: assert(current_bci == 0) failed: bci isn't zero for do_not_unlock_if_synchronized

Roland Westrelin rwestrel at redhat.com
Thu May 26 09:52:07 UTC 2016


>   with this fix wouldn't we have to eliminate escape analysis based 
> eliminate allocation for
>
> JvmtiExport ::can_force_early_return too ?

Because of:

    } else if (JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending()) {
      // Force early return from top frame after deoptimization
#ifndef CC_INTERP
      pc = Interpreter::remove_activation_early_entry(state->earlyret_tos());
#endif

in vframeArrayElement::unpack_on_stack()? Good catch indeed.

Maybe changing that test to:

JvmtiExport::can_force_early_return() && state != NULL && state->is_earlyret_pending() && thread->frames_to_pop_failed_realloc() == 0

is good enough. I'm not sure. Testing for JvmtiExport::can_pop_frame():

  if (!EliminateAllocations || JvmtiExport::can_pop_frame() || !alloc->_is_non_escaping) {
    return false;
  }


in PhaseMacroExpand::eliminate_allocate_node() is conservative. Maybe
it's not needed. Someone would need to take a closer look at the
interaction of what we do when we throw OOME during deoptimization and
jvmti.

Roland.


More information about the hotspot-compiler-dev mailing list