获取到命令行参数之后,可以开始启动jvm了。启动jvm的第一步就是用类加载器加载main方法所在的类,这样才能开始执行main方法。本章主要说的就是类加载的第一步:class文件的读取,而读到class文件之后如何解析将在下一章介绍。
为了保证java类库的安全性,java类加载器需要遵循双亲委派原则。也就是说有三个主要的类加载器:
1.bootstrap类加载器,加载的是/jre/lib文件夹下的类,是java的核心类库
2.ext类加载器,加载的是/jre/lib/ext文件夹下的类,是扩展类库
3.application类加载器,加载的是classpath下的类,即应用程序的类,main方法下的类库
关于双亲委派模型可以参考:https://www.cnblogs.com/parent-absent-son/p/9872443.html
使用classpath类来表示这三个类路径,Entry接口用来代表一个类路径下的类集合,可以有不同实现
type Classpath struct {
bootstrap Entry
ext Entry
application Entry
}
Entry接口定义如下,定义了读取class文件的接口,并且给出了统一创建Entry实例的工厂方法
type Entry interface {
readClass(path string) (clazz []byte,en