]> source.dussan.org Git - aspectj.git/commit
Optimize class loading
authorStefan Starke <stefan@starkeweb.org>
Tue, 8 Oct 2019 11:27:41 +0000 (13:27 +0200)
committerAndy Clement <aclement@pivotal.io>
Thu, 13 Jan 2022 23:07:30 +0000 (15:07 -0800)
commit0e58847d8d341b70734576aa813f755d9a716a18
tree393edd496668ea365780412d10b40e94ee7ac963
parent1b3cead1715cd4f233d81c88ba7a33dc1aa59886
Optimize class loading

In our project we found out that during the build up of the spring context
the class loading takes a very long time.
Root cause is the huge amount of file I/O during pointcut class loading.
We are taking about ~250k file loads.

With these changes we managed to cut down the starting time by around 50%.

What we found out is that IMHO - the clear method of the ClassLoaderRepository
is called far too often -> in our settings this resulted in not a single cache
hit as the cache got cleared permanently.
Therefore we de-actived the cache clear calls inside the ClassLoaderRepository.

Secondly we changed the Java15AnnotationFinder in a way to not always create
new objects for the ClassLoaderRepository but re-use one static instance.
Otherwise we experienced >100k objects being created.

Last but not least we introduced a cache for unavailable classes so that
they do not have to be looked up using file I/O over and over again.

The whole behavior is configurable via
+ org.aspectj.apache.bcel.useSingleRepositoryInstance (default: true)
+ org.aspectj.apache.bcel.useUnavailableClassesCache (default: true)
+ org.aspectj.apache.bcel.ignoreCacheClearRequests (default: true)

Signed-off-by: Stefan Starke <stefan@starkeweb.org>
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
bcel-builder/src/main/java/org/aspectj/apache/bcel/util/ClassLoaderRepository.java
weaver/src/main/java/org/aspectj/weaver/reflect/Java15AnnotationFinder.java