あなたが何をしようとしているのかよくわかりませんが、それにもかかわらず、いくつかの可能な答えがあると思います:
Java 要素を識別するために JVM (および JNI ライブラリー) によって内部的に使用されるさまざまな文字列形式の 1 つであるJNI メソッド記述子に興味があるかもしれません。
あなたが話していることを知るのは難しいです。「メソッドID」は、java.lang.reflect.Method
オブジェクトの参照、または後述のメソッド記述子、またはその他のものにすることができます。それについてどこで読みましたか?
JVM内にそのようなテーブルがあるとは思えません。つまり、JVM 内で処理する場合でも、ほとんどの場合クラスからメソッドを取得するため、グローバルテーブルがあるとは思えないため、メソッドがクラスに格納されていると考えるのが妥当です。リフレクションを使用してメソッドを取得する場合のようです。
Class clazz = String.class;
Method method = clazz.getDeclaredMethod("charAt", Integer.TYPE);
System.out.println(method.getName());
String
一部の util クラスにメソッドを要求するのではなく、クラスにメソッドを要求することに注意してください。メソッドは、クラスから andcharAt
を受け取ります。int
String
言い換えれば、あなたの識別タプルはほぼ正しいです - それはクラスを持っていません:
(methodName, methodParameters)
クラス、メソッド名、パラメーターの型を渡して JVM からメソッドを取得する代わりに、メソッドをクラスから直接取得し、クラスにメソッド名とパラメーターの型を指定します。確かに微妙な違いですが、それはあなたが疑問に思っていることだと思います。
これは、後述する JNI 記述子でも明らかです。たとえば、メソッド
long f(int i, Class c);
次の記述子で表されます。
"(ILjava/lang/Class;)J"
メソッドのクラスへの参照がないことに注意してください。
クラスファイル形式に関する優れたドキュメント( @Lawence によって既に指摘されています) は、いくつかの洞察を与えるかもしれません。完全に読むことをお勧めします。