6

Spring 駆動の AspectJ LTW を (-verbose:class を使用して) デバッグしているときに、Spring が AspectJ ウィーバーへの接続を確立する前に、アドバイスが必要なクラスの 1 つがクラスローダーによってロードされていることに気付きました。

Java がクラスのロードをそれ以上遅らせることができなくなるまで延期することを考えると、その特定のクラスがすぐにロードされるのには理由があるはずです。

特定の瞬間に JVM へのクラスのロードを引き起こす「参照スタック」を取得することは可能ですか (そのため、その使用を延期することができます)。もしそうなら、どうすればいいですか?

4

1 に答える 1

2

すでに述べたように、Java (または実際にはコードを実行する VM) は、その時点でクラスをロードして解決する必要があります。これは通常、いくつかのクラスの連鎖反応にもつながります。織り込まれたコードを含まないクラスが Spring クラスの前にロードされる可能性が高いことは明らかです。

ただし、Java HotSpot VM (Oracle の Java がインストールされている場合の典型的な VM) は、起動時にさまざまな方法で構成できます。これらのオプションの 1 つが"-XX:+TraceClassLoading" です(プラス記号に注意してください。上記のリンクには、残念ながらこのオプションのマイナス記号が記載されています)。ロードされたクラスを参照順にトレースする別のオプションもあります。

これで、問題を絞り込むことができるはずです。そうでない場合は、サンプルコードが役立つ場合があります。私は恐れていますが、それは少し大きすぎるでしょう.

于 2013-07-11T12:21:53.763 に答える