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()方法
- 回收
网友评论