未使用の JARを見つけるために利用できるツールについて、次のような Q&A をたくさん読みました。
ここでの私の質問は、コンパイル時または実行時にクラスパスに未使用の JAR があることによる影響 (メモリへのクラスのロード、パフォーマンスなど) はありますか? 質問はスタンドアロン プログラムと Web サーバー (Apache Tomcat) の両方に当てはまりますが、最初はスタンドアロン プログラムだけを考えていました。
注: JDK 6u32 (64 ビット) を実行しています。
コンパイル時または実行時のいずれかで未使用の JAR がクラスパスにあることによる影響 (メモリーへのクラスのロード、パフォーマンスなど) はありますか?
少なからず影響が出てきます。クラス・ローダー (または同等のコンパイラー) が開始されると、各 JAR ファイルのインデックスを読み取って、各 JAR に含まれるクラスを見つける必要があります。クラスパスに不要な JAR がある場合、クラスローダはより多くの作業を行う必要があり、(少なくとも一時的に) より多くのメモリを使用してインデックスをキャッシュします。
これは、あらゆる種類の Java アプリケーションに当てはまります。
あなたが尋ねなかった質問は、影響が重大かどうかです。答えは「一般的にいいえ」です...しかし、クラスパスに「役に立たないもの」が多ければ多いほど、影響は大きくなります。
コストは比較的小さく、新しいクラスをロードする場合のみであるため、主な問題はパフォーマンスではありません。主な問題は保守性です。たとえば、ライブラリをアップグレードする必要がある場合、ライブラリが使用されていないことを確認するためだけに、アプリケーションが新しいバージョンで正常に動作することをテストするのに多くの時間を浪費する可能性があります。(すでに「使用している」ライブラリの新しいバージョンを必要とする新しいライブラリがあるとします)
はい、影響があります。JVM は CLASSPATH の JAR で必要なクラスを探すためです。また、他の JAR で関連するクラスを検索しないように JVM に指示するために、シールされた JAR を保持することも理にかなっています。
PS: 念のため、javac も Java プログラムです。