これはスタックオーバーフローに関する私の最初の質問ですので、親切にしてください。コンパイルタイムウィービングでSpring @Configurableの起動パフォーマンス
私はアプリを実行しています
- スプリング2.5.xの
- 設定可能な注釈
- コンパイル時織り(CTW)
- のmaven
- 日食/ AJDT
私はCTWを使用し、すべて正常に動作します。しかし、初めて注釈付きクラスをインスタンス化すると、非常に時間がかかります。 2回目は非常に速いです。私は時間の93%が、スタックトレースで org.aspectj.weaver.internal.tools.PointcutExpressionImpl.matchesMethodExecution(方法)
で使用されて見た最初の呼び出しのためのプロファイラスタックトレースを見ると
2回目の呼び出しはこのメソッドでは1%の時間しか使用されません。さらに悪いことに、最初のコールには2回目のコールの約10倍の時間がかかります。
私はウィーバーがもはやCTWに必要ではないと思っていたのですが、私は思っていました。
しかし、SpringがプロトタイプBeanの解析を開始するのは、誰かがこのクラスで新しいものを呼び出すとすぐに始まるようです。これはaspectjウィーバーを使って何が行われるべきかを分析し、次の呼び出しのためにこのプロセスをスピードアップする準備をします。
注釈付きクラスを初期化する最初の呼び出しを高速化する経験がある人はいますか?
これは私のポンポンの抜粋です:SpringのAOPの構成で
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-compile</goal>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
<configuration>
<verbose>true</verbose>
<complianceLevel>1.5</complianceLevel>
<source>1.5</source>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
</plugin>
私はこれがCTWに内在していると思います。最初の呼び出しは、分析、織り、ランタイムクラスを生成するためにすべての重労働をしなければならず、非常に高価です。 – skaffman
LTW(Load-time-weaving)に固有のはずですが、CTWでは不可能です。 – Janning