I suggest the following steps to proceed with this issue:
1) Enhance ClassRegistry with findMatchingMethod / findMatchingDeclaredMethod w/o using hash; and keep Java-side cache (i.e. first check the cache then fall back to JNI). BTW, it is possible to add a lookup cache, like Map<Integer, Member> which maps a hash (name, args) to the member thus avoid recurring JNI calls. Hard to say if caching is beneficial, need some real-world statistics...
2) Check if using hash on native side gives any improvement over linear search. Frankly, I suspect it is negligible and just complicates code.
Note, some extra care should be taken for matching covariant return types, it is missing in the prototype patch. Namely, specification states:
"If more than one method with the same parameter types is declared in a class, and one of these methods has a return type that is more specific than any of the others, that method is returned".