美文网首页
JVM-类加载器

JVM-类加载器

作者: 程序员阿奇 | 来源:发表于2021-07-20 23:10 被阅读0次
类加载器

类加载器是用来把类加载到JAVA虚拟机中。

类加载的过程

类的加载过程采用了父亲委托的机制,这种机制能更好的保证JAVA平台的安全。

父亲委托机制

在此委托机制中。除了java虚拟机自带的根类加载器(Bootstrap)以外,其余的都有且只有一个父加载器。当Java程序请求加载器加载类时,加载器收先委托自己的父加载器加载该类,若父类加载器能加载,则有父类加载加载,否则只能由加载器自身加载。

Java虚拟机自带的类加载器:

(1)根类(Bootstrap)类加载器: 该加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*。根类加载器从系统属性sun.boot.class.path 锁指定的目录中加载类库。跟类加载器的实现依赖于底层操作系统,属于虚拟机实现的一部分,它并没有继承java.lang.ClassLoader类。
(1) 获取Bootstrap类加载器加载路径:

public class ClassLoadTestMain {
    public static void main(String[] args) {
        String classPath = System.getProperty("sun.boot.class.path");
        String[] paths = classPath.split(":");
        for (String path : paths) {
            System.out.println(path);
        }
    }
}
image.png

由此可知 Bootstrap 类加载器主要加载 jre/lib/**下的核心类库。

(2)扩展(Extension)类加载器: 它的父加载器是根类加载器。它从java.ext.dirs系统属性所指定的目录中加载类库,或者从JDK的安装目录的 jre\lib\ext子目录下加载类库,如果把用户创建的JAR文件放大该目录下,也会由扩展类加载器加载。扩展类加载器是纯Java类,是java.lang.ClassLoader类的子类。
(2) 获取Extension类加载器加载路径:

public static void main(String[] args) {
        String classPath = System.getProperty("java.ext.dirs");
        String[] paths = classPath.split(":");
        for (String path : paths) {
            System.out.println(path);
        }
    }
扩展类加载加载路径

(3)系统类加载器:也成为应用类加载器,它的父类加载器是扩展类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,它是用户自定义的类加载器的默认父类加载器。系统类加载器是纯java类,是java.lang.ClassLoader类的子类。

   public static void main(String[] args) {
        String classPath = System.getProperty("java.class.path");
        String[] paths = classPath.split(":");
        for (String path : paths) {
            System.out.println(path);
        }
    }
应用类加载器加载路径
父类委托模型图
双亲委派模型
父亲委托机制的优点:

能够提高软件系统的去安全性。在此机制下自定义的类加载器不可能加载应该有父类加载器加载的可靠类,从而防止不可靠甚至恶意代码代替由父加载器加载的可靠代码。

相关文章

  • JVM-类加载器

    JVM-类加载器 类与类加载器 对于类与类加载器有两种限定: 对于任意一个类,都需要由加载它的类加载器和这个类本身...

  • JAVA-大白话探索JVM-类加载过程(二)

    首先我们知道JVM是什么以及类加载器的作用 不清楚的可以看看JAVA-大白话探索JVM-类加载器(一) 现在我们来...

  • JVM类加载器与双亲委派模型(JDK8)

    引言 在上文JVM-类加载机制[https://imchenway.com/2021/07/01/JVM-%E7%...

  • JVM-类加载器

    类加载器 类加载器是用来把类加载到JAVA虚拟机中。 类加载的过程 类的加载过程采用了父亲委托的机制,这种机制能更...

  • 初识JVM-类加载器1

    1.前言 每当我们编写一个Java程序的时候都会经历,编写,编译,运行的一个过程。编译的过程是通过Java的编译器...

  • 初识JVM-类加载器2

    1前言 在上一小节内容中我们介绍了类加载过程的相关概念,在这一小节我们就接着上一小节的内容介绍一下类加载器的一些内...

  • java类加载器及其原理

    java类加载器 : java中默认有三种类加载器:引导类加载器,扩展类加载器,系统类加载器(也叫应用类加载器) ...

  • java基础知识之java类加载器

    1. 什么是类加载器 类加载器就是用来加载类的东西!类加载器也是一个类:ClassLoader 类加载器可以被加载...

  • JAVAEE中的JAVA基础加强——类加载器、注解、动态代理

    类加载器 什么是类加载器,作用是什么? 类加载器就加载字节码文件(.class) 类加载器的种类 类加载器有三种,...

  • 理解类加载的双亲委派模型

    类加载器 启动类加载器 BootstrapClassLoader 扩展类加载器 ExtensionClassLoa...

网友评论

      本文标题:JVM-类加载器

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