Binary compatibility and finding compiled classes
Bryce McKinlay
mckinlay@redhat.com
Wed Oct 13 15:24:00 GMT 2004
Jakob Praher wrote:
>> > ok. So you mean, like the symbol table the ELF linker uses for linking?
>>>>The symbol table in an ELF shared object contains a hash table for
>>fast lookups. We don't do that with our metadata, but we could.
>>>>>>regarding hasing vs table lookup.
>>If you would use a hash table, you would put the Method_Symbol stuff and
>the offset into the hashtable?
>>So hashtable
>hashCode({ClassName,MethodName,Signature})->offset ?
>but thats whats already there now, since the compiler computes a hard
>coded offset by which the _Jv_Linker knows which
>{ClassName,MethodName,Signature} of {o,a}table_syms is going to be used
>for the {o,a}table slot.
>>Exactly, the code generated by the compiler already knows which otable
slot to use. The hashtable would be used to speed up the look-up of
methods when the runtime is filling out the tables when linking a class.
Currently, to go from a {ClassName,MethodName,Signature} to a _Jv_Method
requires linear searching through the class hierarchy. This would speed
up method lookups in reflection and JNI, too. Personally, I'm not 100%
sure that the gains from hash look-ups will outweigh the cost and extra
memory of generating the hash tables, but its definitely something we
need to keep an eye on - linking needs to be as efficient as possible.
>Perhaps doing inline chaching in static compiled environments is rather
>hard. How does PIC C functions get optimized? I mean there are called by
>the a stub which looks in the .plt table and then jumps to the effective
>address. Does the stub then change the callers address (by using the
>return address pushed on the stack) or is the stub called every time?
>>PLT calls will call the stub every time. This way, only the stub needs
to be modified at runtime: the calling code remains read-only and
copy-on-write is avoided. For this reason, surprisingly, standard C
calls to PIC code can actually be slower than virtual calls that go via
the vtable and avoid the PLT.
Regards
Bryce
More information about the Java
mailing list