Re: very slow jni code callbacks
Andrew Haley <[email protected]>
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <[email protected]> |
Bryce McKinlay wrote: > On Mon, Sep 28, 2009 at 1:03 PM, Andrew Haley <[email protected]> wrote: > >>> When I use oprofile I see at lot of calls to execute_cfa_program >>> and _Unwind_IteratePhdrCallback. >> I think this is a bug. I've had a look at the code, and it's in >> jni.cc: _Jv_JNI_CallAnyVoidMethodV >> >> This calls _Jv_GetTypesFromSignature, which in turn iterates though >> all the class loaders looking up the types of all the arguments. >> But as far as I can see this is a pointless waste of time: the only >> use of the type of each argument is to determine whether it's a >> primitive type or not, and we could certainly have done that when >> we created the jmethodID. There is a field in the method struct called >> ffi_arg_types, but I think it isn't used when calling C to Java via JNI. > > I think the underlying issue is that jMethodID is typedef'ed to > libgcj's internal _Jv_Method. It really needs to use something more > like the interpreter's _Jv_ResolvedMethod or _Jv_JNIMethod so that the > arg types and return type (and, in fact, the ffi_cif itself) can be > resolved once and reused. Well, sure, but it seems to me like this is obvious and almost trivial, so I don't understand what the problem is. I'm guessing that it's simply that no-one ever got around to doing it. Andrew.