das ist meine erste Frage auf Stack-Überlauf, also bitte sei nett.Startleistung von Spring @Configurable mit Kompilierzeit Weben
Ich arbeite mit einer App mit
- Feder 2.5.x
- Konfigurierbare Anmerkungen
- Compile Zeit Weberei (CTW)
- Maven
- eclipse/AJDT
Ich benutze CTW und alles läuft gut. Aber wenn ich eine annotierte Klasse zum ersten Mal instanziiere, dauert es sehr lange. Beim zweiten Mal ist es sehr schnell.
am Profiler Stapelüberwachung der Suche nach dem ersten Aufruf i 93% der Zeit gesehen von org.aspectj.weaver.internal.tools.PointcutExpressionImpl.matchesMethodExecution verwendet wird (Methode)
In dem Stapel von trace der zweite Aufruf wird nur 1% der Zeit in dieser Methode verwendet. Noch schlimmer: Der erste Anruf dauert etwa 10 mal so lange wie der zweite Anruf.
Ich fragte mich, wie ich dachte, dass ein Weber mit CTW nicht mehr benötigt wird.
Aber es scheint, dass Spring beginnt, die Prototyp-Bean nur zu analysieren, sobald jemand in dieser Klasse neu anruft. Es verwendet aspectj weaver, um zu analysieren, was zu tun ist, und bereitet sich darauf vor, diesen Prozess für den nächsten Aufruf zu beschleunigen.
Hat jemand Erfahrung mit der Beschleunigung des ersten Aufrufs der Initialisierung einer annotierten Klasse?
dies ein Ausschnitt aus meiner pom ist:
<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>
Ich denke, das ist in CTW inhärent. Der erste Aufruf muss das ganze Heben, um Laufzeitklassen zu analysieren, zu weben und zu generieren, und es ist ziemlich teuer. – skaffman
Es sollte in Load-Time-Weaving (LTW) inhärent sein, aber nicht in CTW! – Janning