zoukankan      html  css  js  c++  java
  • 了解java的类加载器

    1.java运行之前,编译后的class文件需要加载到虚拟机内存,这必须用到class的加载器来加载,所以有必要了解加载器原理。

    2.加载器采用父类委派机制加载,这样的目的是保证基础类仅仅加载一次(比如JDK里面的Object等),防止自定义加载器破坏原有的代码结构以及类组织关系,一句话,就是安全使用。

    3.看一张图(网上找的)。

    4.了解一下ClassLoader 这个类(一般扩展这个类,为自定义打开的一个HOOK钩子或者回调函数或者缺口)

    getParent()                                                                                  返回该类加载器的父类加载器。
    loadClass(String name)                                                                加载名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
    findClass(String name)                                                                 查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
    findLoadedClass(String name)                                                      查找名称为 name 的已经被加载过的类,返回的结果是 java.lang.Class 类的实例。
    defineClass(String name, byte[] b, int off, int len)                          把字节数组 b 中的内容转换成 Java 类,返回的结果是 java.lang.Class 类的实例。这个方法被声明为 final 的。
    resolveClass(Class<?> c)                                                              链接指定的 Java 类。

    5.  真正完成类的加载工作是通过调用  defineClass  来实现的。---------   定义加载器(defining loader)

       启动类的加载过程是通过调用 loadClass 来实现的               ----------   初始加载器(initiating loader)  

         在 Java 虚拟机判断两个类是否相同的时候,使用的是类的定义加载器。也就是说,哪个类加载器启动类的加载过程并不重要,重要的是最终定义这个类的加载        器。两种类加载器的关联之处在于:一个类的定义加载器是它引用的其它类的初始加载器

    6.  类加载器是 Java 语言的一个创新。它使得动态安装和更新软件组件成为可能

    以上这些只是加载器的一些基本的知识,参考的网上一些讲解,具体的使用场景暂时尚未深入了解,分享给大家。

     

  • 相关阅读:
    Git学习(一)——熟悉git操作流程
    DRF+Vue项目(一)——项目架构
    DRF框架(九)——drf偏移分页组件、drf游标分页组件(了解)、自定义过滤器、过滤器插件django-filter
    DRF框架(八)——drf-jwt手动签发与校验、搜索过滤组件、排序过滤组件、基础分页组件
    DRF框架(七) ——三大认证组件之频率组件、jwt认证
    DRF框架(六)——三大认证组件之认证组件、权限组件
    数据类型
    表操作
    库操作
    MySQL服务管理
  • 原文地址:https://www.cnblogs.com/gstsyyb/p/3475067.html
Copyright © 2011-2022 走看看