笔记:Class 的生命周期

一、Class的生命周期

1、加载:将.class 文件读取到内存,存放在方法区(Perm Gen),  最终产品是Class对象。

2、验证:检查是否有正确数据结构。

3、准备:JVM为Class的静态变量分配内存,并设置默认初始值。

4、解析:把Class的二进制数据中的符号引用替换为直接引用。

5、初始化:JVM为执行Class 的static 语句块。会先初始化其父类。

6、使用

7、卸载:Class对象不再被使用,从方法区移除。


二、类加载器种类

1、Bootstarp 根类加载器:  加载java.lang 包等核心类

2、Extention 扩展类加载器:  加载 jre/lib/ext 下的类

3、System 系统加载器:加载classpath 的类

4、用户自定义加载器:用户自定义


三、类初始化的时机

以下动作导致类的初始化

1、创建类的实例,可以是用 new、反射、clone、反序列化等

2、调用类的static 方法、static 变量

3、调用 Class.forName(" ClassName ") 等

4、初始化类A的子类B,导致类A先被初始化

5、JVM 表明为启动类的类。如命令 " java ClassA ",  ClassA 就是启动类


以下动作不会导致类的初始化:

1、调用类的 final static 变量a,如果a在编译时候就能确定值的

2、调用ClassLoader.loadClass("className")

3、初始化类A,不会初始化其实现的接口B

3、初始化接口A,不会初始化其父接口B



 

posted @ 2014-12-23 15:36  lihui1625  阅读(172)  评论(0编辑  收藏  举报