ClassLoader的类加载机制
Java中程序运行过程大致是由ClassLoader将class load到CodeSegment中,关联main方法执行,其中会有其他class不断load到内存,而不是一次性加载,即为动态加载机制。
我们可以用下面这段代码来观察。
public class TestDynamicLoading {
public static void main(String [] args) {
new A();
System.out.println("AAAAAAAAAAAAAAA");
new B();
new C();
new C();
new D();
new D();
}
}
class A{}
class B{}
class C {
static {
System.out.println("CCCCCCCCCCCCCC");
}
}
class D {
{
System.out.println("DDDDDDDDDDDDDD");
}
}
在VMarguments添加-verbose:class观察类的具体加载过程,run,可以看到load A后,先打印A后再load B。而C的static语句块只会调用一次。D的dynamic语句块会打印两次,即每次new一个对象调用一次。动态语句块可视为无条件加载到class构造方法中,不常用。