zoukankan      html  css  js  c++  java
  • JVM虚拟机------类加载器

    类加载器分类

    public class StackStruTest {
        public static void main(String[] args) {
            // 对用户自定义个类来说:默认使用系统类加载器进行加载-----AppClassLoader
            ClassLoader classLoader = StackStruTest.class.getClassLoader();
            System.out.println(classLoader);
    
            // 获取其上层:扩展类加载器   -------ExtClassLoader
            ClassLoader extClassLoader = classLoader.getParent();
            System.out.println(extClassLoader);
    
            // 获取其上层:获取不到引导类加载器---bootStrapClassLoader ----- 但是获取不到的所以是null
            ClassLoader bootstrap = extClassLoader.getParent();
            System.out.println(bootstrap);
    
            // 么的了,所以会报错
            ClassLoader --- = bootstrap.getParent();
            System.out.println(---);
        }
    }

     虚拟机自带的加载器

    Bootstrap ClassLoader 启动类加载器

    1. 这个类加载器通过c/c++语言实现,嵌套再JVM内部
    2. 它用来加载Java核心库(jre/lib/rt.jar)(rt:runtime)或者sun.boot.class.path路径下的内容,用于JVM自身需要的类
    3. 并不继承自java.lang.ClassLoader,没有父加载器
    4. 加载【扩展类】和【应用加载器】,并指定为他们的父类加载器
    5. 出于安全考虑,Bootstrap启动类加载器只加载java、javax、sun等开头的类

    扩展类加载器  Extension ClassLoader

    1. java语言编写,由sun.misc.Launcher$ExtClassLoader实现
    2. 派生于ClassLoader
    3. 父类加载器为启动类加载器
    4. 从java.ext.dirs系统属性所指定的目录中加载类库,或从JDK的安装目录的jre/lib/ext子目录下加载类库。如果用户创建的JAR放在此目录下,也会自动由扩展类加载器加载

    应用程序类加载器 AppClassLoader

    1. 由java编写,sun.misc.Launcher$AppClassLoader实现
    2. 派生于ClassLoader
    3. 父类加载器为扩展器加载器
    4. 它扶着加载环境变量classpath或者系统属性 java.class.path指定路径下的类库
    5. 该类加载是程序中默认的类加载器,一般来说,java应用的类都是由它来完成加载
    6. 通过ClassLoader #getSystemClassLoader()方法可以获取到该类的加载器

    用户自定义加载器

     

     ClassLoader

    抽象类

    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类的实例
    
    resolveClass(Class<?>c),连接指定的java类

    获取当前的ClassLoader途径

    class.getClassLoader()
    
    Threa.currentThread().getContextClassLoader()
    
    ClassLoader.getSystemClassLoader()
    
    DriveManager.getCallerClassLoader()
  • 相关阅读:
    Appium元素定位方式
    Selenium和Appium的关系
    再生龙备份恢复
    删除CentOS更新后的旧内核
    文字识别网站https://ocr.space/
    kubeasz部署高可用kubernetes1.17.2 并实现traefik2.1.2部署 亲测可用
    docker之Dockerfile实践用dockerfile构建nginx环境
    WordPress如何设置先登录再进入主页
    docker 容器使用 systemctl 命令是报错
    bilibili
  • 原文地址:https://www.cnblogs.com/sicheng-li/p/12952954.html
Copyright © 2011-2022 走看看