zoukankan      html  css  js  c++  java
  • JLS(Third Edition) Chapter12 Execution

    这一章详细说明在一个program执行时,发生的activities。 它根据JVM和组成program的类、接口、实例的生命周期 组织。   一个JVM从加载一个特定的类并调用它的main方法开始启动。 12.1 给出了loading, linking, initialization的大致轮廓,接下来几个section 详细介绍。 这一章还给出了实例创建过程和类实例终结的详细规范,最后谈到类的卸载和program的退出。

    12.1 Virtual Machine Start-up 

    java Test reboot Bob Dot Enzo // Test is a pulibc class name

    执行这个命令,将会启动JVM,传递 “reboot Bob Dot Enzo”三个参数给Test的main方法,并调用它。这个其中完成了下面几件事:

    1. Load the Class Test (调用Test的静态方法导致Test类的加载)
    2. Link Test:Verification,Preparation and Resolution(最后一步根据JVM的不同策略,可以直接解引用,也可以等到真正调用的时候再解引用。原文P311说的the only requirement的意思是,解引用过程中发生的错误 必须在 真正使用这个引用之前 抛出,即提前抛出 或者 当时再抛出 都可以。stackoverflow上关于这个问题的讨论
    3. Initialization:执行class variable initializer and static initializer(如果Test 有super class ,那么它的super class 必须先完成初始化)
    4. Invoke the Test.main

     Loading of Classed and Interfaces , Verification of the Binary Representation, Preparation and Resolution这个也在另一篇文章JVMS chapter5 中有详细的讲解.

    类或接口T初始化的时机:

    T 是一个类,一个T的实例被创建

    T 是一个类,一个T的静态方法被调用

    T 的一个静态 Field 被赋值

    T 声明的一个 静态 Field 被 访问, 并且该Field 不是一个常量

    T 是一个top-level 类,并 lexically 嵌套在 T 内的 一个断言语句被执行

    需要注意的是,对类的Field的访问,只导致 实际定义这个Field的类被初始化,子类不被初始化,即使是通过子类方法这个Field。 reference:P318

      12.5 Creation of New Class Instances

    前面的工作做完以后,指定的构造函数就开始采用下面五个步骤初始化这个new object:

    1. 给构造函数传参数
    2. 如果这个构造函数开头是显示调用同一个类中的另外一个构造函数,那么就用同样的五步递归调用。如果这个递归过程中发生错误,本过程也以同样的错误结束,否则,转到步骤5.
    3. 这个构造函数头没有显示调用另外一个同一类的构造函数。如果这个构造函数所在类不是Object,那么构造函数会显示或隐式调用父类的构造函数。同样用这个五步递归调用。如果中间发生错误,本过程以同样原因结束,否则,转到步骤4
    4. 执行instance initializers 和 instance variable initializers,执行顺序与它们在源码中从左到右一样。如果执行过程中抛出异常,那么这个过程以抛出同样结束,否则 转到步骤5
    5. 执行这个构造函数的剩余部分。如果这个过程抛出异常,那么这个过程一抛出同样异常而结束,否则 这个过程到此正常结束。

    12.6 Finalization of Class Instances 这个部分讲Object.finalize()的相关实现和使用,以及和Memory Model的交互问题

    12.7和12.8 分别讲 Unloading of Classes  and Interfaces 和 Program Exit

  • 相关阅读:
    【转】SQL SERVER DateTime类型的精度
    【转】一道SQL SERVER DateTime的试题
    【转】SQL Server sql_variant 类型的比较
    【转】SQL SERVER 存储过程中变量的作用域
    【转】静态游标和动态游标
    【转】SQL SERVER 开窗函数简介
    Mac上VMWare Fusion配置多台cent os
    Mac os下设置国内镜像加速站
    解决Mac下使用root 权限依旧无法读写文件的问题
    Cent OS (三)vi文本编辑操作
  • 原文地址:https://www.cnblogs.com/ridox/p/execution.html
Copyright © 2011-2022 走看看