
这里是Themberfue
- 在上节课对内存区域划分以及类加载的过程有了简单的了解后,我们再了解其他两个较为重要的机制,这些都是面试中常考的知识点,有必要的话建议背出来,当然不是死记硬背,而是要有理解的背~~~
- 如果对 JVM 的其他机制感兴趣的话,建议去阅读一些书籍,我的建议是失眠的时候看看,可以有效改善睡眠(bushi
类加载器
- 类加载器从 JDK 1.0 就出现了,最初只是为了满足 Java Applet(已经被淘汰) 的需要。后来,慢慢成为 Java 程序中的一个重要组成部分,赋予了 Java 类可以被动态加载到 JVM 中并执行的能力。
- 我们先看官方 API 文档的介绍:A class loader is an object that is responsible for loading classes. The class ClassLoader is an abstract class. Given the binary name of a class, a class loader should attempt to locate or generate data that constitutes a definition for the class. A typical strategy is to transform the name into a file name and then read a "class file" of that name from a file system. Every Class object contains a reference to the ClassLoader that defined it. Class objects for array classes are not created by class loaders, but are created automatically as required by the Java runtime. The class loader for an array class, as returned by Class.getClassLoader() is the same as the class loader for its element type; if the element type is a primitive type, then the array class has no class loader.
- 简单来说:
- 在 Java 中,类加载器(ClassLoader)是负责加载类文件(.class 文件)的组件。类加载器的主要作用是将字节码加载到 JVM 中,并使其成为JVM 可识别并执行的类。
- 类加载器是Java 运行时环境的一部分,它控制了类的加载过程,并且是 JVM 的重要组成部分之一。类加载器是一个负责加载类的对象,用于实现类加载过程中的加载这一步。
- 每个类都是通过 类加载器加载的。类加载器将字节码文件加载到内存,并将其转化为 JVM 内部的 Class 对象,从而使得程序能够使用该类。
- 每个 Java 类都有一个引用指向加载它的
ClassLoader。- 数组类不是通过
ClassLoader创建的(数组类没有对应的二进制字节流),是由 JVM 直接生成的。class Class<T> { ... private final ClassLoader classLoader; @CallerSensitive public ClassLoader getClassLoader() { //... } ... }
- 在前边多线程的学习中,我们学习了懒汉模式,Java 类加载的规则也是采用懒汉模式来加载类的。
- JVM 启动时,并不会一次性加载所有类,而是根据需要动态加载类。也就是说,大部分类在具体用到的时候才会去加载,这样对内存更加友好。这便是懒汉模式一个应用~~~
- 对于已经加载的类会被放在
ClassLoader中。在类加载的时候,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,否则才会尝试加载。也就是说,对于一个类加载器来说,相同二进制名称的类只会被加载一次。public abstract class ClassLoader { ... private final ClassLoader parent; // 由这个类加载器加载的类。 private final Vector<Class<?>> classes = new Vector<>(); // 由VM调用,用此类加载器记录每个已加载类。 void addClass(Class<?> c) { classes.addElement(c); } ... }
分类
Bootstrap ClassLoader(引导类加载器)
- 作用:负责加载 JDK 核心类库,也就是 Java标准库(如
java.lang.*、java.util.*等)。- 加载路径:它从 JRE 的
lib目录下加载类,如rt.jar、resources.jar等。- 特点:Bootstrap 类加载器是 JVM 自带的,用 C++ 实现,不能被 Java 代码继承。它加载的类在 JVM 启动时就被加载到内存。
Extension ClassLoader(扩展类加载器)

最低0.47元/天 解锁文章
920

被折叠的 条评论
为什么被折叠?



