类加载的机制
类的生命周期,加载,验证,准备,解析,初始化,使用,卸载
人生第一步,却是纸尿裤
1加载,此时虚拟机需要做三件事。
1)通过类的全限定名获取类的二进制字节流
2)将这个字节流所代表的静态存储结构转化成方法区运行时数据结构
3)在java堆中生成java.lang.Class对象,作为方法这些数据的入口
2.验证 (人生第二部,穿上开裆裤)
主要作用就是看看这个Class类是不是符合虚拟机的要求。
3.准备
准备阶段为类变量分配内存,给类变量设置初始值。
4.解析
将虚拟机常量池中的符号引用转换成直接引用。
5.初始化
执行类构造器的<clinit>方法。执行字节码,对类变量赋值。
类装载方式:
显示装载:通过class.forname
隐式装载:当碰到new关键字的时候,隐式加载对应的类到jvm。
类加载器都有哪些?
1 启动类加载器:java核心类库
2 扩展类加载器:用来加载java扩展库,
3 系统类加载器:根据java应用类路径来加载java类。
4 用户自定义加载器:通过继承java,lang.ClassLoader
双亲委派模型
类加载器就是根据全限定名将class对象加载到jvm
启动类加载器:是虚拟机的一部分,java核心类库,在JAVA_HOME/lib/目录中
扩展类加载器:\lib\ext
应用程序类加载器:加载用户类路径上的指定类库
用户自定义加载器:
双亲委派模型:收到加载的请求,自己先不去加载,委派给父类去加载。父类不能加载,子类再去尝试,。