2020年6月24日
类加载过程
分为三个步骤,装载、链接、初始化,其中链接分为(验证、准备、解析)
装载,就是拿到class,不管这个class是从文件,还是流,还是其他的地方过来。
验证,是验证class的格式,准备是做些静态变量分配内存,并初始化为当前类型的默认值,比如static int,默认就会赋值为0
解析就是把类的符号引用转化为直接引用,就是在内存中的地址对应起来。
初始化,是给类变量(静态变量)赋定义的值,执行静态代码块(静态代码块只能访问定义在静态代码块之前的静态变量,定义在静态代码块之后的静态变量,可以赋值,但是不能访问)
classLoader:从上到下分别是bootstrap(javahome\lib下面的jar)、ext(javahome\lib\ext下面的jar)、app(classpath下面的jar)、cusome几个级别。遵循双亲委派制度,防止重复加载,同时防止系统中有同名的类,造成污染。也可以打破双亲委派,实现方法是自定义加载器,osgi,spi等。不太了解,osgi之前odl是用的,主要是热加载。

双亲委派的总结:向上委派-加载缓存,向下查找-加载路径


执行方法就是创建栈帧,入栈,出栈的操作。