- 类加载器:(由高到低)bootstrapclassloader;extclassloader;appclassloader
- 不同类加载器有不同的作用(加载基础类库;拓展类库;三方类;自定义类),因此,每个类的字节码对象在内存中有可能不唯一,因为可以通过打破双亲委派机制来使不同的类记载器加载同一个类
- 双亲委派是保证同一个类只被jvm加载一次,对资源的保护.通过向上询问,向下委托的机制来实现.缺点是假如不同的项目有相同的类需要加载,那么双亲委派机制将阻碍同名类的加载.
- 类加载的过程:第一:查找类(通过指定路径加类全名) 第二:类读取(通过字节流输入流读取类到内存,将类信息存储到字节数组) 第三:对字节数组的信息分类初始化并将其结构内容存储到方法区 第四:创建字节码文件,封装类信息的引用,并通过引用获取方法区类信息
- 类加载器的loadclass或者class类的forname方法可以显示加载类;构建对象以及访问类中的属性或者方法会触发隐式加载.访问本类触发主动加载;访问父类时触发被动加载,而被动的加载不会进行类的初始化,因此当类的被触发被动加载的时候,类中的静态代码块不会被执行