1

JVM の起動時に追加のクラスをロードしたいと考えています。具体的には、すべてのコア ライブラリがロードされた後にクラスをロードする必要があります (つまり、rt.jar少なくともlib/extその後)。

クラスはどこにも参照されていません。これには、すべての URL 接続で使用する JVM 全体のプロキシを設定する静的ブロックが含まれています。

-Xbootclasspath/a-Xbootclasspath/pオプションを試しました。バリアントによって作成されたロード/オープン出力も-verbose:class追加され、すべてのコア ライブラリが「ロード」され、JAR は単に「開かれている」ことが示されます。JVM_OPTS-Xbootclasspath

すべてのコアクラスがロードされた後、JVM の起動時にクラスを強制的にロードする方法、または JAR 内のすべてのクラスを強制的にロードする方法はありますか?

4

1 に答える 1

0

調査の結果、カスタム クラスローダーよりも優れた方法を見つけることができませんでした。

これが私が書いたものです。すべてのクラスローディング メソッドに対してデフォルトのクラスローダを本質的に使用しますが、カスタム クラスのローディング/参照が発生する可能性がある非静的イニシャライザへのアクセスを提供します。

public class CustomClassLoader extends ClassLoader {

    {
        // Custom class loading goes in this non-static initializer.
        loadClass("java.org.myorganisation.package.MyClass");
    }

    public CustomClassLoader() {
        super(CustomClassLoader.class.getClassLoader());
    }

    public CustomClassLoader(ClassLoader parent) {
        super(parent);
    }
}

システム プロパティを定義して、カスタム クラス ローダーを指定します-Djava.system.class.loader=com.anon.mypackage.CustomClassLoader

于 2013-05-13T10:53:05.920 に答える