类加载器

首先,因为JVM只能运行二进制文件,为了能让JVM看懂文件都写了什么,我们要使用类加载器把.java文件编译成jvm能看懂的字节码文件并加载到JVM中。
类加载器主要由BootStrap(启动类加载器)、Extension(扩展类加载器)、Application (应用类加载器)三个部分组成。
JVM在类需要加载的时候会直接委派给父类加载器也就是启动类加载器,如果加载不了再往下传,直到应用类加载器。这么做保证了两个好处。
一是通过双亲委派机制可以避免类被重复加载,确保唯一性和效率,二是保证类库的api不会被修改,确保安全性。

类加载机制

类从被加载到JVM到卸出内存一共分为七个阶段
首先是类的加载阶段,JVM通过类加载器加载类,把.class文件加载到内存中。
其次是连接阶段,JVM通过验证,准备,解析三个步骤来链接类,验证是为了确保类文件能够被JVM正确执行,准备是为类分配内存,一般是分配默认值,解析是把符号引用转换成直接引用。
然后是类的初始化阶段,一般这个阶段会把类赋予我们期望的值。但是如果我们新建的类是使用final修饰的基本类型,则赋值会直接在准备阶段完成。
最后是类的使用和销毁阶段,在使用类时我们会调用类的方法,当类不再被使用时,JVM会回收内存。