随谈Java - (三) 对象的生命周期

1、类加载
  • 类加载器将类信息加载到JVM的内存(方法区)
  • 为静态变量分配内存并赋零值,常量则直接赋值
  • 如果符合以下情况则执行类的初始化方法:为静态变量赋值、执行静态代码块
    • 通过new关键字实例化对象、读取或设置类的静态变量、调用类的静态方法
    • 通过反射方式执行以上三种行为
    • 初始化子类的时候会触发父类的初始化
    • 作为程序的入口直接运行(main方法)

注1:可使用javap -c 可以看出JVM会把静态变量的赋值合并到静态代码块
注2:如果直接使用类加载器加载类不会触发执行类的初始化方法

> 追踪类加载的参数
1)-XX:+TraceClassLoading:加载
2)-XX:+TraceClassUnloading:卸载
3)-verbose:class:等价于上面两个
2、创建对象
  • 为成员变量分配内存并赋零值
  • 执行对象的初始化方法:为变量赋值,执行普通代码块,执行构造方法

注:可使用javap -c 可以看出JVM会把成员变量的赋值、普通代码块合并到构造方法(重载的构造方法也会)

3、GC
  • 可达性检测
  • 执行finalize()方法
  • 回收

你可能感兴趣的:(随谈Java - (三) 对象的生命周期)