ClassLoader-1

类加载过程:

类从被加载到虚拟机内存中,到从内存卸载,生命周期:加载 -> 连接 -> 初始化 -> 使用 -> 卸载。其中,连接又分3个部分:验证、准备、解析。

加载:加载字节码等。验证:验证合法性等。

准备:为类变量分配内存并设置类变量(不包括实例变量)初始值,这些变量所使用的内存都在方法区分配。 如下示例,此阶段只设置初始值,即此时value=0。而特殊情况,VALUE_C=123,因为VALUE_C是常量,常量在这个阶段会被初始化成123。class A { puclic static int value = 123; public static final int VALUE_C = 123;}

解析:解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。

判断类是否相等:对于任意一个类,都需要由他的类加载器和类本身一同确立起在虚拟机中的唯一性。即比较两个类是否“相等”,只有在同一个类加载器加载的前提下才有意义,否则,即使来源同一个类,被不同的类加载器加载,那这两个类必定不相等。

双亲委派机制:

TheClassLoaderclass uses a delegation model to search forclasses and resources.  Each instance ofClassLoaderhas anassociated parent class loader.  When requested to find a class orresource, aClassLoaderinstance will delegate the search for theclass or resource to its parent class loader before attempting to find theclass or resource itself.  The virtual machine's built-in class loader,called the "bootstrap class loader", does not itself have a parent but mayserve as the parent of aClassLoaderinstance. 

从以上描述中,我们可以总结出如下四点:

1、类的加载过程采用委托模式实现

2、每个 ClassLoader 都有一个父加载器。

3、类加载器在加载类之前会先递归的去尝试使用父加载器加载。

4、虚拟机有一个内建的启动类加载器(bootstrap ClassLoader),该加载器没有父加载器,可以作为其他加载器的父加载器。


1、Bootstrap ClassLoader启动类加载器,C++实现,加载/lib 目录中的文件,并且该类加载器只加载特定名称的文件(如 rt.jar),而不是该目录下所有的文件。

2、ExtClassLoader,负责加载\lib\ext目录中或系统变量java.ext.dirs 所指定的目录中的文件。

3、AppClassLoader,负责加载用户类路径中的文件java.class.path。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,278评论 19 139
  • ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见...
    时待吾阅读 4,785评论 0 1
  • 1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,...
    java小菜鸟阅读 7,457评论 0 15
  • 0、前言 读完本文,你将了解到: 一、为什么说Jabalpur语言是跨平台的 二、Java虚拟机启动、加载类过程分...
    vivi_wong阅读 5,108评论 0 10
  • 还有那么多信纸 和新买的钢笔 可惜用不上了
    知亦不知阅读 1,895评论 0 0

友情链接更多精彩内容