类加载

类加载的时候会有五种情况下,触发类加载

  1.创建类的实例(new 一个对象的时候),访问某个类,或者接口的静态变量,或者对该类进行赋值的时候,调用该类的静态方法.

  2.反射的方法,

  3.初始化某个子类的时候,也会触发父类初始化.

  4.java虚拟机启动的时候被标明气候某个类的类.

  5.当时有JDK1.7动态语言支持的时候.

类的生命周期:

  加载---验证--准备--解析--初始化--使用--卸载.

  加载:通过一个类的全限定名来获取定义的二进制文件.之后转换到方法区中.

  验证:这个阶段的目的是为了class文件中的字节流时候是否附后jvm的要求.来保证不会危害jvm虚拟机.

  准备:准备阶段是将类的变量分配到指定的内存空间去,设置类变量初始化的阶段.(一般基本数据类型初始化为0,String初始化为null,但是final修饰的变量直接赋值).

  解析:虚拟机将常量池中的符号引用直接转换为直接引用.

     符号引用:符号引用与虚拟机实现的内存布局无关,引用的目标并不一定已经加载到内存中。

     直接引用:直接引用是和虚拟机实现的内存布局相关的。如果有了直接引用,那引用的目标必定已经在内存中存在.

  初始化:在准备阶段已经给变量初始换一次指定的值了,在初始的时候变量赋值是程序员设计的值,进行初始化.也就是这个阶段执行类的构造器.
类的加载器:

  类的加载器分为启动加载器,扩展类加载器,应用层加载器,自定义加载器.

  类加载器的双亲委派机制,类加载器接收到了类加载器的请求之后先调用父类的加载器,之后一层一层的向上找,一直找到了启动加载器.每一层无法加载的时候在项回来找.

你可能感兴趣的:(类加载)