Java基础面试题, Java 的类加载过程是怎样的?
Java基础面试题, Java 的类加载过程是怎样的?
QA
Step 1
Q:: Java 的类加载过程是怎样的?
A:: Java 的类加载过程主要分为以下几个步骤:
1. **加载(Loading)**:JVM 会根据类的全限定名查找字节码文件(.
class 文件),然后将其加载到内存中,并生成一个代表这个类的 Class
对象。
2.
验证(Verification):JVM 对加载的字节码文件进行验证,确保其符合 JVM 规范,保证字节码不被破坏或篡改。
3. **准备(Preparation)**:JVM 为类的静态变量分配内存,并将其初始化为默认值(如 int 类型为 0
,引用类型为 null 等)。
4.
解析(Resolution):将常量池中的符号引用替换为直接引用,这个步骤是将类、接口、字段和方法的符号引用转换为可以直接访问的内存地址。
5.
初始化(Initialization):在这个阶段,JVM 会按照类的初始化顺序执行类的静态初始化块和静态变量的初始化代码。
6.
使用(Using):类加载完成后,JVM 可以使用这个类来创建对象,调用其方法或访问其字段。
7.
卸载(Unloading):当一个类不再被引用且它的 ClassLoader
对象不再引用任何对象时,类会被卸载,JVM 会释放类加载时分配的内存。
Step 2
Q:: 类加载器(ClassLoader)是什么?有什么作用?
A:: 类加载器是 Java 中负责加载类的组件,它将类的字节码文件读取到 JVM 并转换为 Class
对象。Java 中有三种主要的类加载器:
1. **启动类加载器(Bootstrap ClassLoader)**:加载核心类库(如 rt.
jar)中的类。
2. **扩展类加载器(Extension ClassLoader)**:加载扩展目录中的类(如 $JAVA_HOME/lib/
ext 中的类)。
3.
应用程序类加载器(Application ClassLoader):加载用户类路径(CLASSPATH)下的类。
类加载器的重要作用是支持 Java 的动态加载机制,使得 JVM 可以在运行时根据需要加载类。这使得 Java 支持插件式架构、动态代理等功能。
Step 3
Q:: 双亲委派模型(Parent Delegation Model)是什么?
A:: 双亲委派模型是一种类加载机制,其中一个类加载器在加载一个类时,首先会将该请求委派给父类加载器去完成。如果父类加载器无法完成加载,则由子类加载器尝试加载。这个机制的好处是避免类的重复加载,并确保核心类库的安全性,因为核心类库始终由启动类加载器加载。