JVM——类加载机制和双亲委派模型

JVM——双亲委派模型

传送门

  • GC垃圾回收
  • 四种引用类型
  • 运行时内存分配

1. 什么是类加载器

在java语言中,类(class)只有被加载到JVM中才能被运行。当一个程序要运行时,JVM会将编译生成的.class文件加载到内存中去。这个加载的过程就是有类加载器(ClassLoader)实现的。

编辑器编译 javac
类加载器加载
Hello.java
Hello.class
内存

2. 类加载器有哪些

  • 启动类加载器(Bootstrap ClassLoader):负责加载JAVA_HOME\lib目录中的,都是最基础的文件,是虚拟机的一部分,被虚拟机认可的类,是用c++编写的。
  • 扩展类加载器(Extension ClassLoader):负责加载JAVA_HOME\lib\ext目录中的,是基础文件。
  • 应用类加载器(App ClassLoader):也叫系统类加载器,负责加载用户路径(classpath)上的类库,第三方jar包和自己编写的java文件。

3. 什么是双亲委派模型

通过双亲委派机制协调三个加载器完成类的加载

  • 双亲委派机制的具体过程
    1. 当应用类加载器接收到加载任务时,把任务委托给它的父加载器扩展类加载器;扩展类加载器接收到加载任务时,把任务继续委托给父加载器启动类加载器;
    2. 如果启动类加载器没有找到所需加载的类,就将此加载任务退回子加载器扩展类加载器;扩展类加载器也做同样的事情;
    3. 如果应用类加载器仍然没有找到所需的class文件,则抛出异常。

JVM——类加载机制和双亲委派模型_第1张图片

  • 双亲委派机制的好处

确保类的全局唯一

如果自己写的类与核心类库中的类重名了,那么该类可以被编译,但无法被加载运行。因为按照双亲委派机制,该类会被委托到启动类类加载器加载,而启动类可以查到核心库中的类,并加载该核心类。

确保系统的安全

通过双亲委派机制,JVM总是先从核心库中查找类,这样可以防止不可信的类假扮成被信赖类对系统造成伤害

你可能感兴趣的:(java,java,jvm)