美文网首页
Java ClassLoader那些事儿

Java ClassLoader那些事儿

作者: spring_coderman | 来源:发表于2019-12-07 01:16 被阅读0次

1.java类加载的定义&过程

  • 1.定义
    将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。
  • 2.类加载的过程


    image.png
  • 3.类编译的过程


    image.png
  • 4.类加载的各个阶段


    image.png

Class对象实际上是在堆区
验证的过程中包括:文件格式验证,元数据验证,字节码验证,符号引用验证
解析阶段:类或接口、字段、类方法、接口方法、方法类型、方法句柄、点限定符

clinit()方法:类构造器方法,class类构造器对静态变量,静态代码块进行初始化,https://blog.csdn.net/u013309870/article/details/72975536
linit()方法:对象构造器方法

  • 5.类的初始化与销毁


    image.png

2.双亲委派模型要点讲解

  • 1.定义
    子类加载器收到的类加载请求,不会先去处理,而是先把请求委派给父类加载器处理,当父类加载器处理不了时再返回给子类加载器加载。
  • 2.加载流程


    image.png

这里的双亲严格说其实只有父类,没有母类,只是泛指双亲为父类,也不是指祖父类,容易混淆

  • 3.双亲委派相关的类


    image.png

说是双亲委派模型,但是在其实现过程中,其实是通过组合模式实现的.

3.违反双亲委派模型的特例

  • 1.类加载器和抽象类java.lang.ClassLoader比双亲委派模型出现的早,为满足用户自定义类加载器的稳定,需要调用子类的loadClass()方法。
  • 2.通过线程上下文类加载器(Thread Context ClassLoader)满足JNDI、JDBC、JCE、JAXB和JBI相关服务的类加载需求。
  • 3.为追求程序动态可用而实现代码热替换、模块热部署。将目标程序模块和其类加载器等通过自定义的类加载机制全部替换掉而不需要重启虚拟机,如OSGi的模块化热部署技术,Tomcat的JSP热替换功能。

4.Tomcat的类加载器

  • 1.类加载器的定义
    类加载器定义:虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。
  • 2.tomcat的类加载模型


    image.png

上面画的是tomcat 5,6版本的类加载模型,其中C,D可以有多个。

  • 3.tomcat的类加载结构


    image.png

5.自定义类加载

  • 1.类加载过程使用的核心方法和自定义的过程


    image.png

6.总结

1.JVM类加载的优点或者作用

  • 大多数网络应用框架底层都会用到
  • 帮助解决类加载相关的问题
  • 是编写架构底层服务的基础
  • 帮助编写更好的应用程序
  • 代码加密,服务隔离,热加载
  • 从指定的地方加载类,如磁盘或者网络

JVM类加载机制

相关文章

网友评论

      本文标题:Java ClassLoader那些事儿

      本文链接:https://www.haomeiwen.com/subject/qmpygctx.html