这一章详细说明在一个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

JLS(Third Edition) Chapter12 Execution的更多相关文章

  1. android开发系列之多线程

    今天在这篇博客里面,我只想谈谈自己对程序开发里面避无可避的一个问题-多线程的一些看法与思考. 其实说到多线程这个名称相信只要接触过软件这个行业的人都已经耳熟能详了,但是如果被问到到底什么才是多线程呢? ...

  2. java Thread 接口学习

    对于程序员来说 Thread应该都不会陌生,具体的接口调用不是本篇的重点.Thread的基本概念及接口的使用:java多线程 下面将更多的从底层实现角度讲一下Thread. Thread的声明如下: ...

  3. Object的wait/notify/notifyAll&&Thread的sleep/yield/join/holdsLock

    一.wait/notify/notifyAll都是Object类的实例方法 1.wait方法:阻塞当前线程等待notify/notifyAll方法的唤醒,或等待超时后自动唤醒. wait等待其实是对象 ...

  4. java 并发编程——Thread 源码重新学习

    Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...

  5. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(五)之Controlling Execution

    In Java, the keywords include if-else,while,do-while,for,return,break, and a selection statement cal ...

  6. 《Pro SQL Server Internals, 2nd edition》的CHAPTER 3 Statistics中的Introduction to SQL Server Statistics、Statistics and Execution Plans、Statistics Maintenance(译)

    <Pro SQL Server Internals> 作者: Dmitri Korotkevitch 出版社: Apress出版年: 2016-12-29页数: 804定价: USD 59 ...

  7. JVM Specification 9th Edition (4) Chapter 4. The class File Format

    Chapter 4. The class File Format Table of Contents 4.1. The ClassFile Structure 4.2. Names 4.2.1. Bi ...

  8. JVM Specification 9th Edition (4) Chapter 3. Compiling for the Java Virtual Machine

    Chapter 3. Compiling for the Java Virtual Machine 内容列表 3.1. Format of Examples 3.2. Use of Constants ...

  9. JVM Specification 9th Edition (3) Chapter 2. The Structure of the Java Virtual Machine

    Chapter 2. The Structure of the Java Virtual Machine 内容列表 2.1. The class File Format (class文件的格式) 2. ...

随机推荐

  1. SPOJ GSS4 Can you answer these queries IV

    Time Limit: 500MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Description You are g ...

  2. 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair

    题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...

  3. linux下制作win7安装盘(mint、ubuntu、debian)

    今天替同事装系统.因为现在的debian系系统都可以直接用dd拷贝iso到u盘的方法进行安装,所以,想当然的用dd来制作windows安装盘.没反应!所以有了下面的方法. 1. 将u盘格式化为ntfs ...

  4. MVC 路由

    1.ASP.NET MVC框架中提供的URL路由机制能够使URL不必映射到应用程序的特定物理文件. 2.当用户访问基于MVC模式创建的网站时,只需要在浏览器地址栏里输入类似于下面的URL: http: ...

  5. 系统安装之:虚拟机VMware V12.0.1 专业版 + 永久密钥

    撰写日期:2016-6-30 10:30:26 转自:http://blog.sina.com.cn/s/blog_4549d6770102vxue.html    VMware V12.0.1 专业 ...

  6. Cost Function Summary

    Mean Square Error \[cost(t,o)=\frac{1}{n}\sum\limits_{i=1}^n{(o-t)^2}\] Binary Cross-Entropy 用于计算 ta ...

  7. Linux 中强大且常用命令:find、grep

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下:    find命令        f ...

  8. mysql中常用的字符串函数

    写在分割线之前,个人以为,数据库应该具备简单的的数据加工能力.如同食品在吃之前,是要经过很多到工序的,有经过初加工.粗加工.精加工.深加工等.那么mysql也应该并必须担任起数据初加工以及粗加工的责任 ...

  9. STM8S VCAP

    There is a specific pin called vcap in stm8s mcu. I recommend this pin connects to a 1uF capacitor w ...

  10. eclipse配置gradle

    1.Grandle官网下载Gradle 2.解压文件,配置到环境变量 3.测试安装成功,$ gradle -v 4.打开eclipse,Help-->Install new software,输 ...