站长网 语言 最新版JDK15的JVM类加载器分析

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

需要注意的是,Bootstrap ClassLoader智慧加载特定名称的类库,比如rt.jar.这意味我们自定义的jar扔到\jre\lib也不会被加载. 负责将/jre/lib或- Xbootclasspath参数指定的路径中的,且是虚拟机识别的类库加载到内存中(按照名字识别,比如rt.jar,对于不能识别

需要注意的是,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获取。

JDK9 后

应用程序类加载器,用于加载应用级别的模块,比如:

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/biancheng/yuyan/2021/0602/8838.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部