src/share/vm/prims/jni.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8014013 Cdiff src/share/vm/prims/jni.cpp

src/share/vm/prims/jni.cpp

Print this page

        

*** 1334,1343 **** --- 1334,1344 ---- // non-interface call -- for that little speed boost, don't handlize debug_only(No_Safepoint_Verifier nosafepoint;) if (call_type == JNI_VIRTUAL) { // jni_GetMethodID makes sure class is linked and initialized // so m should have a valid vtable index. + assert(!m->has_itable_index(), ""); int vtbl_index = m->vtable_index(); if (vtbl_index != Method::nonvirtual_vtable_index) { Klass* k = h_recv->klass(); // k might be an arrayKlassOop but all vtables start at // the same place. The cast is to avoid virtual call and assertion.
*** 1353,1368 **** } } else { // interface call KlassHandle h_holder(THREAD, holder); ! int itbl_index = m->cached_itable_index(); ! if (itbl_index == -1) { ! itbl_index = klassItable::compute_itable_index(m); ! m->set_cached_itable_index(itbl_index); ! // the above may have grabbed a lock, 'm' and anything non-handlized can't be used again ! } Klass* k = h_recv->klass(); selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK); } } --- 1354,1364 ---- } } else { // interface call KlassHandle h_holder(THREAD, holder); ! int itbl_index = m->itable_index(); Klass* k = h_recv->klass(); selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK); } }
src/share/vm/prims/jni.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File