src/share/vm/ci/bcEscapeAnalyzer.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6700102 Cdiff src/share/vm/ci/bcEscapeAnalyzer.cpp

src/share/vm/ci/bcEscapeAnalyzer.cpp

Print this page

        

*** 216,225 **** --- 216,232 ---- ciInstanceKlass* klass = target->holder(); ciInstanceKlass* calling_klass = method()->holder(); ciInstanceKlass* callee_holder = ciEnv::get_instance_klass_for_declared_method_holder(holder); ciInstanceKlass* actual_recv = callee_holder; + // some methods are obviously bindable without any type checks so + // convert them directly to an invokespecial. + if (target->is_loaded() && !target->is_abstract() && + target->can_be_statically_bound() && code == Bytecodes::_invokevirtual) { + code = Bytecodes::_invokespecial; + } + // compute size of arguments int arg_size = target->arg_size(); if (!target->is_loaded() && code == Bytecodes::_invokestatic) { arg_size--; }
src/share/vm/ci/bcEscapeAnalyzer.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File