一、类加载机制
classloader
如何理解classpath?
classloader的作用是什么?
classloader有哪些类型?
如何设置和获取classloader?
如果类A中引用了类B,java虚拟机将使用A还是B的类加载器来加载类B?
如何判定两个类是同一个类?
如何定义自定义类加载器?
类加载器在JDK动态代理的作用是什么?
二、双亲委派模型
什么是双亲委派模型?
如何破坏双亲委派机制?
三、类加载时机
类的加载流程是什么?
什么情况下需要开始类加载过程的第一个阶段“加载”?
哪些场景会触发类的初始化?
通过子类引用父类的静态字段会触发子类的初始化吗?
通过数组定义来引用类,会触发此类的初始化吗?
引用常量,会触发此类的初始化吗?
四、类加载过程
类的加载过程中开发人员可以通过代码控制的部分有哪些?
‘加载’阶段主要作用是什么?
校验、准备、解析阶段主要做了啥?
类构造器<clinit>()什么时候会生成,怎么查看?
静态语句块中能访问到定义在静态语句块之前的变量吗,能否给其赋值?
类构造器<clinit>()什么时候不会生成?
静态变量、静态代码块、实例变量、非静态代码快、构造函数,这几个的执行顺序是什么?有继承的情况下呢?
接口的<client>()何时调用,父接口的呢?接口的实现类初始化会触发接口的初始化吗?
好多人都关注在内存区域、oom、垃圾回收器
类加载器、jvm并发对开发来讲意义更大一些
我们有了class文件、jvm,class文件怎么装载到虚拟机中去?