加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

最新版 JDK15的JVM类加载器分析

发布时间:2022-12-05 12:35:10 所属栏目:语言 来源:
导读:  需要注意的是,Bootstrap ClassLoader智慧加载特定名称的类库,比如rt.jar.这意味我们自定义的jar扔到\jre\lib也不会被加载.

  负责将/jre/lib或- Xbootclasspath参数指定的路径中的,且是虚拟机识别的类库加
  需要注意的是,Bootstrap ClassLoader智慧加载特定名称的类库,比如rt.jar.这意味我们自定义的jar扔到\jre\lib也不会被加载.
 
  负责将/jre/lib或- Xbootclasspath参数指定的路径中的,且是虚拟机识别的类库加载到内存中(按照名字识别,比如rt.jar,对于不能识别的文件不予装载),比如:
 
  Object
 
  System
 
  String
 
  Java运行时的rt.jar等jar包
 
  系统属性sun.boot.class.path指定的目录中特定名称的jar包
 
  在JVM启动时,通过Bootstrap ClassLoader加载rt.jar,并初始化sun.misc.Launcher从而创建Extension ClassLoader和Application ClassLoader的实例。
 
  查看Bootstrap ClassLoader到底初始化了那些类库:
 
  URL[] urLs = Launcher.getBootstrapClassPath().getURLs();
 
         for (URL urL : urLs) {
 
             System.out.println(urL.toExternalForm());
 
         }
 
  JDK9 后
 
  负责加载启动时的基础模块类,比如:
 
  java.base
 
  java.management
 
  java.xml
 
  1.2 Platform ClassLoader
 
  JDK8 时Extension ClassLoader
 
  只有一个实例,由sun.misc.Launcher$ExtClassLoader实现:
 
  负责加载\lib\ext或java.ext.dirs系统变量指定的路径中的所有类库
 
  加载一些扩展的系统类,比如XML、加密、压缩相关的功能类等
 
  JDK9时替换为平台类加载器
 
  加载一些平台相关的模块,比如java.scripting、java.compiler*、 java.corba*。
 
  那为何 9 时废除替换了呢?
 
  JDK8 的主要加载 jre lib 的ext,扩展 jar 包时使用,这样操作并不推荐,所以废除。而 JDK9 有了模块化,更无需这种扩展加载器。
 
  1.3 Application ClassLoader
 
  只有一个实例,由sun.misc.Launcher$AppClassLoader实现。
 
  JDK8 时
 
  负责加载系统环境变量ClassPath或者系统属性java.class.path指定目录下的所有类库。
 
  如果应用程序中没有定义自己的加载器,则该加载器也就是默认的类加载器。该加载器可以通过java.lang.ClassLoader.getSystemClassLoader获取。
 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!