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方法,并调用它。这个其中完成了下面几件事:
- Load the Class Test (调用Test的静态方法导致Test类的加载)
- Link Test:Verification,Preparation and Resolution(最后一步根据JVM的不同策略,可以直接解引用,也可以等到真正调用的时候再解引用。原文P311说的the only requirement的意思是,解引用过程中发生的错误 必须在 真正使用这个引用之前 抛出,即提前抛出 或者 当时再抛出 都可以。stackoverflow上关于这个问题的讨论)
- Initialization:执行class variable initializer and static initializer(如果Test 有super class ,那么它的super class 必须先完成初始化)
- 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:
- 给构造函数传参数
- 如果这个构造函数开头是显示调用同一个类中的另外一个构造函数,那么就用同样的五步递归调用。如果这个递归过程中发生错误,本过程也以同样的错误结束,否则,转到步骤5.
- 这个构造函数头没有显示调用另外一个同一类的构造函数。如果这个构造函数所在类不是Object,那么构造函数会显示或隐式调用父类的构造函数。同样用这个五步递归调用。如果中间发生错误,本过程以同样原因结束,否则,转到步骤4
- 执行instance initializers 和 instance variable initializers,执行顺序与它们在源码中从左到右一样。如果执行过程中抛出异常,那么这个过程以抛出同样结束,否则 转到步骤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的更多相关文章
- android开发系列之多线程
今天在这篇博客里面,我只想谈谈自己对程序开发里面避无可避的一个问题-多线程的一些看法与思考. 其实说到多线程这个名称相信只要接触过软件这个行业的人都已经耳熟能详了,但是如果被问到到底什么才是多线程呢? ...
- java Thread 接口学习
对于程序员来说 Thread应该都不会陌生,具体的接口调用不是本篇的重点.Thread的基本概念及接口的使用:java多线程 下面将更多的从底层实现角度讲一下Thread. Thread的声明如下: ...
- Object的wait/notify/notifyAll&&Thread的sleep/yield/join/holdsLock
一.wait/notify/notifyAll都是Object类的实例方法 1.wait方法:阻塞当前线程等待notify/notifyAll方法的唤醒,或等待超时后自动唤醒. wait等待其实是对象 ...
- java 并发编程——Thread 源码重新学习
Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...
- 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 ...
- 《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 ...
- 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 ...
- 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 ...
- 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. ...
随机推荐
- [iOS 基于CoreBluetooth的蓝牙4.0通讯]
一.首先大致介绍下蓝牙4.0的模式,中心和周边: 一般情况下,iPhone作为中心,接收来自周边传感器(比如手环等)采集的数据. 二.那整一个数据通讯的协议是怎样的呢? 为什么要一层层搞这么复杂呢?据 ...
- ubantu安装sogou输入法
Ubuntu的搜狗输入法安装步骤 1 本来想先移除ibus,但是在之后发现如果直接使用下面的命令 sudo apt-get remove ibus 移除ibus将导致系统某些地方不正常的问题,例如 ...
- Linux上性能异常定位以及性能监控
引言:大多数的服务都是跑在Linux上的,Linux现在也已经到了一个很广泛的应用,但是仍然会有很多问题出现,我们就来讨论下我们性能监控的指标,性能监控无非就是从I/O,内存,CPU,TCP连接数,网 ...
- C#开发和调用Web Service
http://blog.csdn.net/h0322/article/details/4776819 1.1.Web Service基本概念 Web Service也叫XML Web Service ...
- HtmlAgilityPack使用
http://stackoverflow.com/questions/5876825/htmlagilitypack-and-timeouts-on-load http://stackoverflow ...
- NXP Mifare S50标准IC卡- 访问位(Access Bits) 分析
Mifare S50 标准IC卡有1K 字节的EEPROM,主要用来存储数据和控制信息.1K 字节的EEPROM分成16 个区,每区又分成4 段,每1段中有16 个字节.每个区的最后一个段叫“尾部&q ...
- 9月13日JavaScript语句循环(100以备奇偶数、100以内与7先关的数、100以内整数的和、10以内阶乘、乘法口诀、篮球弹起高度、64格子放东西)
3.循环 循环是操作某一个功能(执行某段代码). ①循环四要素: a 循环初始值 b 循环的条件 c 循环状态 d 循环体 ②for循环 a 穷举:把所有的可能性的都一一列出来. b 迭代:每次循环都 ...
- 为什么可以用while(cin)?
为什么可以用while(cin)? /** * @brief The quick-and-easy status check. * * This allows you to write const ...
- Hash Table in C
http://www.sparknotes.com/cs/searching/hashtables/section3.rhtml http://en.literateprograms.org/Spec ...
- 修改 页面中默认的select样式
select样式定制: select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择 ...