約 30 個の jar を含むクラスパス ディレクトリがあります。私の単純なコンソール アプリケーションでは、これらすべての jar を指す sURLClassLoader
のリストで初期化する場所を作成しています。URL
URL[] urls = new URL[] {
new URL("jar:file:/D:/Work/temp/jars/antlr-2.7.7.jar!/"),
new URL("jar:file:/D:/Work/temp/jars/aopalliance-1.0.jar!/"),
new URL("jar:file:/D:/Work/temp/jars/c3p0-0.9.1.jar!/"),
...
}
URLClassLoader cl = new URLClassLoader(urls, getClass().getClassLoader());
Class<?> c = cl.loadClass(...);
etc...
このように、すべてが正常に機能しており、 my から単一のクラスをロードするのに数ミリ秒かかりますURLClassLoader
。
次に、このコード スニペットを取り、Tomcat で実行します。たとえば、サーブレット内の単純な Web リクエストでトリガーされますdoGet()
。驚くべきことに、平均的なクラスをロードするのにかかる時間は 10 ~ 15 倍長くなり、初期化時間全体が受け入れられなくなります。この問題は、少なくとも Tomcat バージョン 6 と 7 の両方で発生します。
何か案は?