微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

所有java程序都运行在Java虚拟机(JVM)上。编译后,java 类将转换为平台与机器无关的字节码,并且编译后的类存储为.class 文件。每当我们尝试使用它时,ClassLoader都会将该类加载到内存中。当通过名称引用这些类时,这些类就被引入到 Java 环境中。一旦类开始运行,类的加载就由类加载器完成,并且 ma​​in() 方法是启动该类的一种方法

Java 9 中的类加载器有一些小的变化:

  • 系统类加载器 在 Java 9 中不再存在,它是 一个实例>urlclassloader而是一个内部类。它是模块中类的认加载器
  • 扩展类加载器重命名平台类加载器。 Java SE 平台中的所有类都可以通过平台类加载器可见,并且 Java 社区进程下的模块中但不属于 Java SE 平台的类也可以通过平台类加载器可见。
  • 应用程序不能依赖于定义哪个平台类的类加载器,Java SE 平台中的某些类是由平台类加载器定义的,而其他类则是由引导类加载器定义的.
  • 如果现有代码创建的类加载器以引导类加载器作为父类加载器,那么我们需要更改为使用平台类加载器作为父类加载器。
  • 平台类加载器不是urlclassloader的实例,而是一个内部类。
  • 引导类加载器一个 >JVM的内置类加载器。然而,它定义了关键模块的类,例如基础。使用 -Xbootclasspath/a 部署的应用程序或使用 null 作为父级创建类加载器的应用程序可能需要更改。
  • 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: " + ClassLoaderTest.class.getClassLoader());
      System.out.println("Classloader of Permission: " + java.sql.sqlPermission.class.getClassLoader());
      System.out.println("Classloader of LinkedList: " + java.util.LinkedList.class.getClassLoader());
      return;
   }
}

输出

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

以上就是Java 9中的类加载器有哪些变化?的详细内容,更多请关注编程之家其它相关文章

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐