当前位置:首页 > 娱乐

【showta】Java的ClassLoad

ClassLoader简介

ClassLoader负责在运行时将Java类动态加载到JVM中,ClassLoader是JRE的一部分。因此,由于ClassLoader的存在,JVM无需了解底层文件和文件系统即可运行Java程序。

此外,ClassLoader不会一次性将所有Java类加载到内存中,而是在应用程序需要时加载。这是ClassLoader工作的地方。classloader负责将类加载到内存中。

内置CLassLoader类型

下面是一个简单的示例,说明加载其他类的ClassLoader。

如果运行上述方法,将按如下方式打印:

如您所见,有三个class loader:app class loader、ExtClassLoader和BootstrapClassLoader。BootstrapClassLoader显示为null,因为它是C/C编写的本机代码,而不是Java代码。

AppClassLoader加载上述示例方法的类(Test),AppClassLoader将Java类加载到类路径中。

接下来,ExtClassLoader加载Logging类,而ExtClassLoader加载标准内核Java扩展类-%JAVA_HOME%/jre/lib/ext下的类。

最后,BootstrapClassLoader加载ArrayList类,该类是所有ClassLoader的父类。

BootstrapClassLoader

Java类由Java.lang.ClassLoader的实例加载,但AppClassLoader本身是Java类。所以谁会加载应用类加载程序(java.lang.classloader)?

这是BootstrapClassLoader起作用的地方。

BootstrapClassLoader负责加载JDK内部类、rt.jar和%JAVA_HOME%/lib目录下的其他核心库,ext目录是扩展库。此外,BootstrapClassLoader还是其他ClassLoader实例的爸爸。

BootstrapClassLoader是JVM的一部分,以本机代码(C/C)编写,并在不同平台上实施。

ExtClassLoader

BootstrapClassLoader的子类ExtClassLoader负责从JDK的扩展目录% Java _ home%/lib/ext/目录或环境变量java.ext加载标准内核的Java扩展类

AppClassLoader

AppClassLoader将所有应用程序级类加载到JVM中,加载到类环境变量CLASSPATH下的文件中,并且是ExtClassLoader的子类。

ClassLoader是如何工作的?

ClassLoader是JRE的一部分,当JVM请求类时,ClassLoader将查找该类,并使用完全限定的类名加载该类。

如果在运行Java.lang.Cla()方法时负责加载类,则首先尝试根据完全限定的类名加载类;如果未加载到该类,则委托给超类ClassLoader以递归方式执行。

最后,如果父类ClassLoader找不到该类,子类将调用java.net.URLCla()方法在文件系统中查找该类。如果最后一个子类ClassLoader也无法加载类,则会引发java.lang.NoClassDeFoundError或Java . lang . classnotfoundexcrption异常。

从调用Java.lang.ClassForName()开始,首先通过超类ClassLoader加载类,然后尝试通过java.net.URLCla()查找class本身。如果找不到该类,将引发ClassNotFoundException异常。

ClassLoader有三个重要功能:

委托模型

ClassLoader遵循根据请求查找类或资源的委托模型。ClassLoader实例将对类或资源的搜索委托给父ClassLoader。

假设有请求将应用程序类加载到JVM中。AppClassLoader将其类的加载委托给父ExtClassLoader,父ExtClassLoader委托给BootstrapClassLoader。

只有当BootstrapClassLoader和ExtClassLoader未能成功加载类时,AppClassLoader才会加载类。

类唯一性

委托模型的结果便于确保class的唯一性。因为我们总是想向上委托。如果父类ClassLoader找不到该类,则只直接加载当前的ClassLoader实例。

可见性

子类ClassLoader显示在父类ClassLoader加载的类中。

例如,BootstrapClassLoader加载的类对ExtClassLoader加载的类具有可见性,反之亦然。

如果AppClassLoader加载a类,ExtClassLoader加载b类,则AppClassLoader加载的其他类将同时显示a和b。

但是,如果ExtClassLoader加载另一个类,则只显示b类。

1.《【showta】Java的ClassLoad》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【showta】Java的ClassLoad》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/2847840.html

上一篇

【罗劲松】《巡回检察组》终场推测这些人都是幕后老板

下一篇

【金雳】好玩的是指环王:同样是反派的boss,巨龙斯马友赫,炎魔到底谁更厉害?

【showta】日本男子发明了“肌肉外套”,使少年害怕情敌

【showta】日本男子发明了“肌肉外套”,使少年害怕情敌

showta相关介绍,日本艺术家Mori(Showta Mori)在网上发布了包含自己新发明的一套“充气肌肉服”的视频。这套服装还帮助一名高中生战胜情敌,赢得了心爱的少女心。(威廉莎士比亚,高中生,高中生,高中生,高中生,...

【showta】配音演员苍井秀泰的第四首单曲将于9月2日公开发行

【showta】配音演员苍井秀泰的第四首单曲将于9月2日公开发行

showta相关介绍,月女剑选公布于2015-6-21 19:37:33 【新闻】声优苍井翔太的第4张单曲决定于9月2日公开发售 作者:leom上的:动画粉丝 在大人气作品《歌曲的王子殿下》中,为角色微风蓝发声的男性配音演...

【showta】宅男武器攻击:女朋友膝盖枕头、肌肉夹克、胸部模拟器。

【showta】宅男武器攻击:女朋友膝盖枕头、肌肉夹克、胸部模拟器。

showta相关介绍,日本发明了“女朋友膝盖枕头”,可以模仿女性大腿,还可以聊天。 一家日本公司用长得像女孩子大腿的枕头和立体的虚拟游戏眼镜,帮助不想一个人守沙发的男人度过夜晚的寂寞时光。 这家公司为孤独的男性提供了和金发...