Java 9 のクラスローダーの変更点は何ですか?

WBOY
リリース: 2023-08-30 15:37:02
転載
710 人が閲覧しました

Java 9中的类加载器有哪些变化?

すべての Java プログラムは Java 仮想マシン (JVM) 上で実行されます。コンパイル後、Java クラスは プラットフォーム および マシン非依存バイトコード に変換され、コンパイルされたクラスは .class ファイルとして保存されます。これを使用しようとすると、ClassLoader がクラスをメモリにロードします。これらのクラスは、名前で参照されると Java 環境に導入されます。クラスが実行を開始すると、クラスのロードはクラス ローダーによって行われ、main() メソッドはクラスを開始する 1 つの方法です。

Java 9 では、クラス ローダーにいくつかの小さな変更があります:

  • システム クラス ローダー は Java 9 には存在しなくなり、## になりました。 # >URLClassLoader のインスタンス、 は内部クラスです。これは、モジュール内のクラスの デフォルト ローダーです。
  • Extension ClassLoaderPlatform ClassLoader に名前変更されました。 Java SE プラットフォーム内のすべてのクラスは、プラットフォーム クラス ローダーを介して表示されます。また、Java コミュニティ プロセスの下のモジュール内にあるが Java SE プラットフォームの一部ではないクラスも、プラットフォーム クラス ローダーを介して表示されます。
  • アプリケーションは、どのプラットフォーム クラス ローダーが定義されているかに依存できません。Java SE プラットフォームの一部のクラスはプラットフォーム クラス ローダーによって定義されますが、他のクラスは ブートストラップ クラス ローダーdefine.
  • 既存のコードで作成されたクラス ローダーがブートストラップ クラス ローダーを親クラス ローダーとして使用する場合は、プラットフォーム クラス ローダーを親クラス ローダーとして使用するように変更する必要があります。
  • Platform Class LoaderURLClassLoader のインスタンスではなく、内部クラスです。
  • Bootstrap クラス ローダー >JVM の組み込みクラス ローダー です。ただし、Base などの主要モジュールのクラスを定義します。 -Xbootclasspath/a を使用してデプロイされたアプリケーション、またはクラスローダーを作成するために null parent として使用するアプリケーションは、変更が必要になる場合があります。
  • ul>例

    public class ClassLoaderTest {
       public static void main(String args[]) {
          System.out.println("Class Loader Test");
          ClassLoaderTest test = new ClassLoaderTest();
          try {
             test.showClassLoaders();
          } catch(ClassNotFoundException cnfe) {
             System.out.println(cnfe.getMessage());
          }
       }
       public void showClassLoaders() throws ClassNotFoundException {
          System.out.println("Classloader of this class: " + <strong>ClassLoaderTest.class.</strong><strong>getClassLoader()</strong>);
          System.out.println("Classloader of Permission: " + <strong>java.sql.SQLPermission.class.</strong><strong>getClassLoader()</strong>);
          System.out.println("Classloader of LinkedList: " + <strong>java.util.LinkedList.class.</strong><strong>getClassLoader()</strong>);
          return;
       }
    }
    ログイン後にコピー

    出力

    <strong>Class Loader Test
    Classloader of this class: jdk.internal.loader.ClassLoaders$AppClassLoader@504bae78
    Classloader of Permission: jdk.internal.loader.ClassLoaders$PlatformClassLoader@299a06ac
    Classloader of LinkedList: null</strong>
    ログイン後にコピー

以上がJava 9 のクラスローダーの変更点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート