类从被加载到虚拟机内存开始到卸载内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载
类必须立即初始化的情况:
是连接阶段的第一步,这个阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并不会危害虚拟机的自身安全。
正式为变量分配内存并设置初始值的阶段,这些变量使用的内存将在方法区中分配。仅包括类变量(被static修饰)不包括实例变量。赋初值是指数据类型的零值。
将常量池中的符号引用替换为直接引用。
执行类中定义的Java程序代码,初始化阶段是执行类构造器(\())方法的过程。
启动类加载器、扩展类加载器、应用程序类加载器。
双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。这里的类加载器的父子关系一般是组合关系来复用父加载器的代码。
工作过程:如果一个类加载器收到类加载请求,首先会把这个请求为派给父类加载器去完成,每一层的类加载器都是这样的,因此所有请求都传给顶层的启动类加载器,只有当父类加载器反馈无法完成加载请求,子类才会尝试自己加载。