rt.jar ライブラリから Java のjava.lang.Classクラスを逆コンパイルすると、ネイティブ メソッド宣言があることに気付くでしょう。
native ConstantPool getConstantPool();
少し前に、Sun の .class ファイル仕様を使用してクラスの逆コンパイルを行い、各 .class ファイルから定数プール レコードを取得することができました。しかし、それは実際にはクラスを逆コンパイルしていました。
ただ、Class クラスにこの署名があることに驚きました。そこで、Main() メソッドに小さなコードを書きました。
ConstantPool cp = new ConstantPool();
cp.getMethodAtIfLoaded(0);
sun.reflect.ConstantPoolクラスを逆コンパイルすると、クラス、メソッド、パラメータ、宣言されたフィールドなどに関連する多くのメソッドがあることがわかります。
アプリを実行すると、次の HotSpot 例外が発生します。
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d7e01d3, pid=2816, tid=5464
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_15-b04 mixed mode)
# Problematic frame:
# V [jvm.dll+0xa01d3]
#
# An error report file with more information is saved as hs_err_pid2816.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
どのクラスのConstantPoolも取得できないのはなぜですか? getConstantPool()がネイティブ/非パブリック メソッドであるという事実を考慮すると、Sun は私が直接呼び出すことを望んでいないと思います。