java类型生命周期(java面试)

java的类型生命周期-常见的java的面试题目

jjava的类型生命周期可以用如下几个部分表示:装载,连接,初始化,卸载

如下图

 

装载过程大致分为3部分,首先,我们应当有一个.class文件,这个是二进制的数据文件,里面含有java类型的信息。第二部,就是将这个二进制文件解析出对应的java类型。第三步,是在堆上创建这种类型的对象。

连接过程:连接过程分为三步:一:验证,验证就是保证文件按照jvm规范,不会导致jvm崩溃,验证期间需要完成的检查包括:检查final不能拥有子类,final方法不能被覆盖,确保不存在不合理的引用等。(这个地方有些不理解,因为检查这些工作应当是编译错误,但是出现编译错误是不能编译出class文件的,那这种检查实际上是检查非法的class文件,比如黑客产生的class文件,用于破坏jvm的完整性。而字节码完整性是对类,方法是否存在等进行相应的校验)

 

准备:

准备阶段就是分配内存

解析:

解析的第一步是初始化。初始化我们需要进行相关的研究。切记:只有首次使用的时候才会完成类的初始化,而首次使用出现在以下的6种情况,对此我们分别进行了相关的测试。

1.创建新实例。

FTest a  = new FTest();将调用FTest的构造器,完成初始化

2.调用某个类的静态方法

FTest.CallF();

3.使用某个类的静态字段

System.out.println(FTest.FI);

4.调用某些反射方法

5.初始化改类的子类

6.当虚拟机启动某个被表明为启动类的类

tomcat中指定启动类的时候会进行改过程

 

所有类变量的初始化语句和类型的静态初始化构造器都被java编译器收集在一起,放到一个特殊的方法中,成为<clinit>方法.

4.卸载

java类生命周期和对象声明周期很相似,虚拟机创建并初始化对象,在程序不在引用对象的时候,便执行垃圾收集,同样,虚拟机创建并初始化类,在类不在被引用的时候便执行相应的卸载。而启动类型的类将不会被回收

 

posted @ 2012-06-27 17:43  庸蛹  阅读(365)  评论(0编辑  收藏  举报