java类型生命周期及创建对象方式

生命周期

一个类型的生命周期包括:装载,连接,初始化的初始阶段,占生命周期大部分时间的类型实例化,垃圾收集和对象终结。及生命周期结束从虚拟机卸载该类型。

类加载机制

启动任何一个java程序,虚拟机从加载一个类开始会自动执行装载,连接,初始化这三步,因此开始阶段的这三个过程也称为类加载机制。

类加载机制的装载:

1、虚拟机通过需要加载的类的全限定名来定位对应的class文件,并以线性二进制字节流形式将它们加载到虚拟机。

2、虚拟机将这些字节流转化为方法区的内部数据结构(字节流代表的静态存储结构转化为方法区的运行时数据结构)。

3、在堆内存中生成代表各个类型的java.lang.Class类型的实例对象(此实例对象是反射机制创建对象的基础)作为方法区那些类的各种数据的访问入口。由此可见方法区和堆在装载阶段就开始被分配和使用。一个虚拟机实例只有一个方法区和堆,被该虚拟机实例要运行的java程序的所有线程共享。

装载图——java类型生命周期及创建对象方式

 

类加载机制的连接:

1、验证——确保类文件的字节流包含信息符合当前虚拟机的规范。

2、准备——在方法区内给类变量分配内存,并给类变量设置默认初始值

3、解析——将常量池内的符号引用(编译期间还未进行内存分配,只能用符号引用来代替实际引用)替换成直接引用。

 

类加载机制的初始化:(给类变量赋予正确的初始值)

1、先初始化类的直接超类(第一个被初始化的类永远是Object)(接口初始化时不需要管父接口)

2、执行本类的<clinit>方法(按代码顺序组织起来的类变量赋值语句和静态初始化块)

只有在初始化阶段,虚拟机才开始执行字节码