• JVM(二)---双亲委派机制


    在这里插入图片描述

    上一篇:JVM(一)—基础概念

      常说的双亲委派机制实际上是类加载器(Class Cloader)的一种加载机制。

    1.什么是类加载器?

      我们在进行java程序开发的时候,.java文件会经过javac命令编译为.class字节码文件,而类加载器的职责就是动态的加载这些.class文件到JVM内存空间中,类通常是在第一次使用它的时候进行加载,也就是说,如果没有使用过该类,则该类不会被加载到JVM中。

    2.加载器有哪些?在这里插入图片描述

    1.BootStrap Loader

      引导类加载器是用本地代码实现的类加载器,它负责将<JAVA_HOME>/lib下面的核心类库 或 -Xbootclasspath选项指定的jar包等虚拟机识别的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。

    2.ExtClass Loader

      扩展类加载器负责将 <JAVA_HOME >/lib/ext或者由系统变量-Djava.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。

    3.Application Loader

      应用程序类加载器(系统类加载器)负责将用户类路径(java -classpath或-Djava.class.path变量所指的目录,即当前类所在路径及其引用的第三方类库的路径下的类库 加载到内存中。如果没有自定义过类加载器,则默认应用程序类加载器为程序默认的加载器。

    3.类加载流程?

    1.类加载器收到class文件加载请求
    2.收到请求的加载器会将此请求委派给其父加载器进行加载,此父加载器上面还有父加载器,加载请求继续向上传递。
      所以一个类加载请求会先由最上层的加载器进行加载,如果此加载器在其范围内找到所需的类的时候,就处理成功。否则会交由其下一层的加载器(它儿子)来处理此请求。

    4.获取类加载器的方法?
    public static void main(String[] args) {
    		Student student = new Student();
    		//1.获取某class对象
    		Class<? extends Student> studentClass = student.getClass();
    		//2.获取该class对象的加载器
    		ClassLoader classLoader = studentClass.getClassLoader();
    		System.out.println(classLoader);
    		//3.获取该加载器的父加载器
    		ClassLoader parentClassLoader = classLoader.getParent();
    		System.out.println(parentClassLoader);
    		//4.获取该父加载器的父加载器
    		ClassLoader grandFatherLoader = parentClassLoader.getParent();
    		System.out.println(grandFatherLoader);
    	}
    

    下一篇:JVM(三)—堆、栈、方法区

  • 相关阅读:
    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/wgty/p/12810446.html
Copyright © 2020-2023  润新知