Heim  >  Artikel  >  Java  >  Welche Änderungen gibt es an den Klassenladern in Java 9?

Welche Änderungen gibt es an den Klassenladern in Java 9?

WBOY
WBOYnach vorne
2023-08-30 15:37:02672Durchsuche

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

Alle Java-Programme laufen auf der Java Virtual Machine (JVM). Nach der Kompilierung werden Java-Klassen in Plattform und maschinenunabhängigen Bytecode konvertiert und die kompilierten Klassen werden als .class-Dateien gespeichert. Immer wenn wir versuchen, es zu verwenden, lädt ClassLoader die Klasse in den Speicher. Diese Klassen werden in die Java-Umgebung eingeführt, wenn sie namentlich referenziert werden. Sobald eine Klasse ausgeführt wird, erfolgt das Laden der Klasse durch den Klassenlader, und die Methode main() ist eine Möglichkeit, die Klasse zu starten.

Es gibt einige kleinere Änderungen an Klassenladern in Java 9: ​​​​

  • Der Systemklassenlader existiert in Java 9 nicht mehr, er ist eine Instanz von >URLClassLoader, sondern eine innere Klasse. Es ist der Standardlader für Klassen in Modulen.
  • Extension Class Loader wurde in Platform Class Loader umbenannt. Alle Klassen in der Java SE-Plattform sind über den Plattform-Klassenlader sichtbar, und Klassen, die sich in Modulen unter dem Java-Community-Prozess befinden, aber nicht Teil der Java SE-Plattform sind, sind ebenfalls über den Plattform-Klassenlader sichtbar.
  • Eine Anwendung kann nicht auf den Klassenlader angewiesen sein, der die Plattformklasse definiert. Einige Klassen in der Java SE-Plattform werden vom Plattformklassenlader definiert, während andere Klassen vom Bootstrap-Klassenlader
  • definiert werden Der durch den vorhandenen Code erstellte Klassenlader verfügt über den Bootstrap-Klassenlader als übergeordneten Klassenlader. Anschließend müssen wir ihn ändern, um den Plattform-Klassenlader als übergeordneten Klassenlader zu verwenden.
  • Platform ClassLoader ist keine Instanz von URLClassLoader, sondern eine interne Klasse.
  • Bootstrap Class Loader ist ein >JVMs integrierter Klassenlader. Es definiert jedoch Klassen für Schlüsselmodule, wie zum Beispiel base. Anwendungen, die mit -Xbootclasspath/a bereitgestellt werden, oder Anwendungen, die null als übergeordnetererstellter Klassenlader verwenden, müssen möglicherweise geändert werden.
  • ul>Beispiel

    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;
       }
    }

    Ausgabe

    <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>

Das obige ist der detaillierte Inhalt vonWelche Änderungen gibt es an den Klassenladern in Java 9?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen