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 语言的一个创新。它使得动态安装和更新软件组件成为可能

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

     

  • 相关阅读:
    oracle-Oracle试题
    webservice-WebService试题
    php-PHP试题
    xml-xml试题
    ajax-Ajax试题
    用java在客户端读取mongodb中的数据并发送至服务器
    表格标记
    HTML常用标记
    Java操作Mongodb 保存/读取java对象到/从mongodb
    Spark Streaming的编程模型
  • 原文地址:https://www.cnblogs.com/gstsyyb/p/3475067.html
Copyright © 2011-2022 走看看