Java的类加载过程 – 《Java核心技术》

Java类加载步骤

  1. 加载:将字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据结构;
  2. 链接:把原始类定义信息平滑的转化入JVM,包括:
    • 验证:验证字节信息是符合Java虚拟机规范的。
    • 准备:创建类或接口中的静态变量,并初始化静态变量的初始值。
    • 解析:将常量池中的符号引用替换为直接引用。
  3. 初始化:真正执行类初始化的代码逻辑,包括静态字段赋值、执行类定义中的静态初始化块内的逻辑。

双亲委派模型

简单来说就是当类加载器试图加载某个类型的时候,除非父加载器找不到相应类型,否则尽量将这个任务代理给当前加载器的父加载器去做,使用委派模型的目的是避免重复加载Java类型。

Java的类加载器

  • 启动类加载器,加载jre/lib下的jar文件,比如rt.jar。
  • 扩展类加载器,加载jre/lib/ext/目录下的jar包
  • 应用类加载器,加载我们最熟悉的classpath的内容。

Java的类加载过程 - 《Java核心技术》

如果不同类加载器都自己加载需要的某个类型,那么就会出现多次重复加载,产生资源浪费。

类加载器的特征

  • 双亲委派模式。但不是所有的类加载都遵循这个模型。有时候,启动类加载器需要加载用户代码,比如JDK内部的ServiceProvider/ServiceLoader机制,用户可以在标准API框架上提供自己的实现。这时候会使用上下文加载器。
  • 可见性。子类加载器可以访问父类加载器加载的类型,反过来不行。
  • 单一性。由于父加载器的类型对子加载器可见,所以父加载器加载过的类型,就不会在子加载器中重复加载。

原文 

http://yizhanggou.top/javade-lei-jia-zai-guo-cheng-javahe-xin-ji-zhu/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java的类加载过程 – 《Java核心技术》

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址