JVM --字节码的加载

ClassLoader类加载器

  常见的类加载器有BootStrapClassLoader<-ExtClassLoader<-AppClassLoader<-用户ClassLoader

BootStrapClassLoader:加载Java自带的核心类;

ExtClassLoader加载在/jre/lib/ext目录下的jar包,同样用户可以将jar放在该目录下。

AppClassLoader 加载classpath下面的内容,

加载过程:

读取文件并加载,首先申请父类的加载器进行加载,如果父类加载器无法加载,再由子类来加载,最终找不到该类,那么将会抛出ClassNotFoundException;

第二步,链接。对已经加载的字节码进行解析、校验,看是不是符合一定的规范,否则抛出ClassNotFoundError.然后实现内存的分配。

第三步,初始化。调用构造函数,对静态变量、static块初始化。

值得注意的是,在类加载的过程中,会阻塞多个线程。

其实ClassLoader本身就是Java类,而这些类是由JVM内核来实现加载。

原文地址:https://www.cnblogs.com/plxx/p/4337568.html