JVM类加载机制是通过类加载器来实现的。类加载器负责在JVM运行时将字节码文件加载到内存中,并将其转换为可执行的类。类加载器主要分为三种:启动类加载器、扩展类加载器和应用程序类加载器。
-
启动类加载器:负责加载JVM自身需要的类,是JVM的一部分,是用原生代码实现的,并不继承自java.lang.ClassLoader类。启动类加载器会加载JVM运行时所需的基础类,如java.lang.Object等。
-
扩展类加载器:负责加载JVM扩展类库中的类,一般加载JAVA_HOME/lib/ext目录下的jar包中的类。
-
应用程序类加载器:也称为系统类加载器,负责加载应用程序中的类,一般是通过ClassLoader类的getSystemClassLoader()方法获取。应用程序类加载器会加载CLASSPATH环境变量中指定的类。
类加载器遵循双亲委派模型,即除了启动类加载器外,每个类加载器在加载类时都会先委托给其父类加载器来尝试加载,只有在父加载器无法加载时才会自己尝试加载。这样可以确保类加载器之间的层次关系,避免重复加载类和类冲突。
当需要加载一个类时,类加载器会先检查该类是否已经加载过,如果已经加载过则直接返回该类的Class对象;如果没有加载过,则会通过类路径查找到对应的字节码文件,并将其加载到内存中,然后经过链接、初始化等步骤完成类加载的过程。
总的来说,JVM类加载机制通过类加载器来实现,采用双亲委派模型来保证类加载的层次关系和避免重复加载,确保程序的正确性和安全性。