Java虚拟机规范中文版

所需积分/C币:4 2013-01-06 20:53:55 10.14MB PDF
收藏 收藏
举报

Java虚拟机规范中文版可以结合Java虚拟机一起学习。
2.16.7类实例的终止 ·司唱鲁争带聊。章昏母晕争Q是身PQ■《哥鲁P即·鲁鲁鲁音D●音b鲁垂●44日bbb要1DD·bb (31) 2.16.8类和接口的终止和卸教 (32) 2.16.9虚拟机退出……!…M………!(32) 2.17线程 D。●看香鲁罪● (32) 第三章Jav虚拟机的结构 ………………………………(35) 3.1数据类型……… (35) 3.2基本类型和值 ……(35) 321整型和值… ●·昏●单p●4◆ (36) 3.2,2浮点型和值 鲁鲁D香@E曝量看 号■冒即冒q、甲,号冒甲早曾早身量即 (36 3.23 returnAddress类型和值……1(7 3.2.4没有 boolean类型………………………(37) 33引用类型和值………………………(37 …………………………∴…………(37) 3.5运行期数据区… ◆·音·●·白b自·自自晶4音自●暑D鲁鲁 ………………………………(37) 3.5.1pc寄存器 ●省q■●p·章中q··自·↓●●聊卓;量D個看罪 ……………x(37) 3.5.2 Java栈…………………………………………1(38 3.5.3堆……………………… ·毒。自 ……s…(38) 3,5,4方法区 面4·。申自··●导 ·甲中如。◆●乘中··自鲁香B身导 聊b.鲁 (39) 3.5.5常数池… …………39 3.5.6自身方法栈 垂身b●鲁鲁非身 (40) 3.6框架 ·品‘自。音·晋↓自· ……(40) 3.6.1局部变量… t··?↓?··.t,●音· ……………(41) 3,6,2操作数栈:: 曲自·吾pbD··●·t咖命φ命ψ聊◆日:争↓p鲁看命●鲁命命自司4◆备器 3.6.3动态链接 ■·看音章D 自;會扩p··Pb●甲·中平中中击命·合···D是 (41) 3.6.4正常的方法结束 ……………………(41) 3,65不正常的方法结束…… ………………(42) 3.6,6附加儐息∷ ……4(4 3.7对象的表示 ep非·●命自··D是·日··日,·:·e● ………(42) 3.8特殊的初始化方法 ·日········PP·····●··· 3.9异常… (43) 3,10 class文件格式………… (43) 3.11指令集概述…………………… …"………………………(43) 3.11.1类型和Jv虚拟机……………:…44( 3112装载和存储指令 ,n4141,…,………(46) 3.11.3运算指令 …14(46) 3.11.4类型转换指令…!:: …(47) 3.11.5对象创建和操纵……………" (48) 3.16。操作数管理指令………………………:(49) 3.1.7控制转移指今………"…" …:1:1(9) 3.118方法调用和返回指令………111 ………(49) 3.11.9抛出和处理异常:1 (50) 3 311.10实现 finally ……(50) 3.I1.11同步… ……(50) 3.12公共设计,私有实现………………………………………………(50) 第四章 class文件格式 ●··章。命·普卡中鲁申中·D曾 …(51 4.1 Classfile………… ………(51) 4.2完整限定类名称的内部形式……………………………………………………(54) 4.3描述符… ··········s··日··········.··········↓··,:··:·····:·◆亡··· ……(54) 4.3.1语法记号 ………(55) 43.2域描述符 ·■●d罪看园聊·■ ·目鲁鲁鲁·鲁DD看哥鲁曹督留《看·t。导看●看·看冒看量司罪鲁鲁量 (55) 4.3.3方法描述符 西.幽d鲁B血a …(56) 4.4常数池……………………………………………………(56) 4.4.1 CoNSTANT- Class………………………………………………………(57) 4.4.2 CONSTANT- Fieldref, CONSTANT_Methodref FA CONSTANT-Interface Methodref ……°0(58) 443 CONSTANT-String………… (59) 4.4.4 CONSTANT Integer和 CONSTANT Float……………………………(59) 4.4.5 CONSTANT- Long FA CoNSTANT-Double ……(60) 4.4.6 CONSTANT-Name And Type .. (61) 4.4.7 CONSTANT_Utf8………………………………………………(62) 生.5域…… ●·章·学 ●看●●bb· ………(63) 4.6方法… 要●看。看要。电中·香d看· (64) 4.7属性…………… …………………………………(66) 4.7.1定义和命名新属性… (66) Fle属性 ………………………………(67) 4.7.3 Constant value属性… 甲甲P带甲·申 ……(67) 4.7.4Code属性…………………………………………………………………(68 4.7.5 Exceptions属性… …………………………(70) 4.7.6 Line Number Table属性………………………………………………………(71) 4.7.7 LocalVariable Table属性………… 72) 4.8对Java虚拟机代码的约束 自自●d着◆着自tp●●··着·中●咖d 4.8.1静态约束…………………………………………………………………(73) 4.8.2结构约束…………………………… (75) clas件的检验 4.9.1检验进程 p阜4·“d··●··p甲甲章自白由····.··:·····,P·:·E·早 …(78) 4.9.2字节码检验器…………………………………………99 4.9.3长整数和双精度数 ●换b444。甲q4.合b命·语●日·身q罪·罪·自··即····P日···,· (81) 4.9.4实例初始化方法和新创建的对象 (81) 4.9.5异常处理者 4.9.6异常和 finallv……… ……(82) 4.10Java虚拟机和 class文件格式的限制……… (84) 第五章常数池解析 ………………………(85) 5.1类和接口解析…………… ……………………………(86) 5,11不由类装载器装载的当前类或接口…………………………………………(86) 5.12由类装载器装载的当前类或接口……………………………………………(88) 数组类 (89) 52域和方法解析………………………………………………………………(90) 5.3接口方法解析 一·非 …………(90) 5.4字符串解析……………… (90) 5.5其他常数池项的解析 (91) 第六章Java虚拟机指令集… ……………………………………………(92) 6.1假定:“必须”的含义 (92) 6.2保留操作码…………………………………………………………………………(92) 6.3虚拟机错误 辛自·鲁自鲁q彰·b血D。鲁鲁。命看 …………(92) 6,4Java虚拟机指令集………(93) 第七章为JaV虚拟机编译…………………………………(183 7.]范例格式…… …(183) 7.2常数、局部变量和控制构造的使用…………………………………(184) 7.3运算… (188) 7.4访问常数池 …(189) 7.5更多控制范例………………………………………………(190) 7.6接收参数………… …………………(193) 7.7调用方法 …………(194) 7.8处理类实例 ●·最●鲁鲁自阝鲁↓·鲁·命···备··鲁导↓D·●罪甲q。■鲁看 ………………(196) 7.9数组 (198 7.10编译开关 ●··ψ··D鲁b●·自自tbt命山■·■』罪↓D自↓■昏■ ………(200) 7.11对操作数栈的操作… ………………………………………(202) 7.12抛出和处理异常……… 单血■毒自●·鲁吾自省面b …………(203) 7.13编译 finally…s (207 7.14同步……… 自自自p命自看·命自·命b身自命音看ψ·自 (210) 第八章线程和镀 …………(212) 8.1术语和框架 导冒聊着P督菲■p (212) 8.2执行顺序和一致性 ………………………(213) 8.3有关变量的规则…… (214) 8.4 Double和Long变量的非原子处理……………(215) 8.5有关锁的规则 ··a·a···· ·非·d吾●甲。甲··中 (215 8.6有关锁和变量的交互作用的规则………(4215 8.7有关易变变量的规则…………………………(216) 8.8先见存储操作 节·E口中申·P●曹鲁···鲁 自着 ……(216) 8.9讨论……… 曝bd● .(217 8.10范例:可能的交换… …………………(217) 8.11范例:无序写……………………………………………………(220) 8.12线程 ·············:····自t●命申·●ψ●自。···备··●···●·血··备···●··b4垂4D·4b·咖dp (222) 8,13锁和同步 …………………(222) 8.14等待集和通知… …………………"…s…s……(22) 第九章优化 命····喜4··4·4d···d·4··4·4···········◆卡·a···‘命 …(224) 9.1通过重写动态链接 ………(224) 9.2-quck伪指令…… ……(224) 第十章操作码的操作码助记符……………………………………(247) 第一章引言 1.1点历史 Java是一种一般用途的、并发的、面向对象的程序设计语言。它的语法和C与C++相 似,但是它省略了许多使C和C++复杂的、易混淆和不安全的特性Java最初是为处理编制 联网消费者设备软件中的问题而开发的它被设计成支持多主机体系结构,并允许软件组件的 安全发送。为了达到这些要求,编译后的Java代码必须可以在网络间移植,在任何客户机上操 作,并对客户保证其运行是安全的。 world wide web的流行使Java的这些属性更加令人感兴趣。王联网展示了怎样通过简 单的方法来获得具有丰富媒体的内容。Web测览器,例如 Mosaic,使成千上万的人能够在网上 漫游,并使Web成为大众文化的浪峰部分最终有一种媒体,在那里你所看到的和听到的基本 上是一样的,不论你使用的是Mac、PC还是UNX机器,不论你是联接在一个高速网络上还 是使用一个缓慢的调制解调器 web迷们很快就发现Web的HTML文档格式支持的内容太有限了。HTML的扩展(例 如 forms),只是使这些限制更加明显,使人清楚地意识到,没有什么浏览器能够囊括用户想要 的所有特点。可扩展性才是解决方案。 sun的 Hotjava浏览器通过允许把Java程序嵌入到HML页中,展示了Java的令人感 兴越的属性。这些叫作 applet的程序同HTML页一起透明地下载到 Hotjava浏览器中,并在 其中显示。在被浏览器接受之前, applets被仔细地检查以确保它们是安全的和HTML页一 样,编译后的Java程序是与网络和平台无关的。 Applet的行为相同,与它们来自何处或者与它 们被装载运行在何种机器上无关。 由于Java是扩展语言,web浏览器不再限于固定的能力。程序员可以对一个 applet只写 次,它将可以在任何地方的任何机器上运行。Java驱动的web页的访问者可以使用在web 页上找到的内容,确信这些内容不会损害他们的机器。 ava展示了使用互职网发送软件的新方法这个新的范例超越了浏览器,我们认为它是 个具有改变计算过程潜力的革新 1.2Java虚拟机 Java虚拟机是Sun的Java程序设计语言基石。它是Java技术的组成部分。Java技术负 责Java的跨平台传输、编译后的短小的代码保护用户不受恶意程序的侵害。 Java虚拟机是一个抽象的计算机,与实际的计算机一样,它具有一个指令集并使用不同 的存储器区域。使用台虚拟机实现一种程序设计语言是很普通的;最著名的虚拟机可能是 UCSD Pascal的 P-Code机器 Sun microsystems公司做成的Java虚拟机的第一个原型,实现在一个代表现代个人数字 助理(PDA)的手持设备上,用软件仿真了Java虛拟机的指令集。Sun现在的Java版本 3· Java开发者工具(JDK)10.2版—在win32、 MacOs和 Solaris平台上仿真了Java虚拟机 但是,ava虚拟机并不假定任何实现技术或者主机平台。它并不非得是解释型的,它也可以像 传统的程序设计语言一样,通过把它的指令集编译成个实际的CPU的指令集来实现。它也 可以用微代码或者直接用芯片实现 Java虚拟机不以别Java程序设计语言,它以识别一种特殊的文件格式,即 class文件格 式。一个 class文件包含Java虚拟机指令(或者 bytecodes)和一个符号表以及其他的辅助信 为了安全,Jav虚拟机对cla件的代码强加了很强的格式和结构限制。但是,任何具 有能够按照有效的 class文件表达的功能的话言都可以由Jav虚拟机作主机。受到一个广泛 可用的、与机器无关的平台的吸引其他语言的实现者正在转向Java虚拟机作为他们的语言 的发送工具。将来,我们将考虑对Java虚拟机作有限的扩展,以更好地支持其他语言 1.3各章概述 本书其余部分结构如下 第二章给出本书其余部分所需的Java概念以及术语的概览 ·第三章给出Java嘘拟机的概览 第四章定义 class文件格式,它是编译后的Java代码的平台和与实现无关的文件格式。 第五章描述常数池的运行期管理。 第六章描述Java虚拟机的指令集按照操作码助记符的字母顺序,展示指令。 第七章给出了将Java代码编译成Java虚找机指令集的范例 第八章描述Java虚拟机线程以及它们与存储器的交互作用 第九章描述Sun的Java虚拟机实现使用的优化。虽然严格地说这不是规范的一部分, 但是它本身是一个有用的技术,又是这类可用于Java虚拟机实现技术的一个范例 第十章给出按照操作码值索引的Java虚拟机操作码助记符表 第二章Java概念 Java虚拟机被设计,以支持Java程序设计语言,因此需要Java语言中的一些概念和词汇 来理解虚拟机。本章给出足够的对Java的概览以支寺后面对Java虚拟机的讨论,它的材料压 缩自 James gosling、 Bill Joy以及 Guy steele所写的《Java语言规范》一书中对Java语言的完 整讨论,有关材料的细节和范例请参考该书熟悉该书的读者可以跳过这一章。熟悉Java但不 熟悉《Java语言规范》的读者,应当至少跳读本章所介绍的术语。 本章不打算提供Java语言的介绍或者完整的处理。对于Java的介绍参见 Ken arnold和 James gosling所写的巛Java编程语言》书。 2.1 Unicode Java程序用 Uincode字符编码1.1.5版编写。 Unicode字符编码1.1.5版在 The Unicode Standard Worldwide Character Encoding, Version 1.0, Volume 1, ISBN0-201-56788-1, 7 Volume2,ISBN0-201-60845-6中规范。关于 Unicode1.1.5的最新信息可在ftp:∥ unicode org处获得最新信息中有几个小的错误,错误的更正参考{Java语言规范》一书,那里出版的 Unicode的更新信息将发到Urlhttpljava.suncom/series 除了注释和标识符(§2.2)和字符与字符串文字(§2.3)的内容,Jaa程序中的所有输入 元素都只由ASCI字符形式。ASCI( ANSI X3.4)是美国信息交换标准代码。 Unicode字符的 前128个字符编码是 ASCII字符 2.2标识符 标识符( dentifier是不限长度的 Unicode字母letr.)和数字( digits)的序列,序列的第 个字符必须是字母。字母和数字可以从整个 Unicode字符集中选择, Unicode字符集支持当 个世界上使用的绝大多数书写字母,这允许Java程序员在他们的程序中使用以他们的母语编 写的标识符。 当被传递给一个被认为是Java标识符中的字母的 Unicode字符时,Java方法 Character is Javaletter返回true。当被传递给一个被认为是Java标识符中的字母或者数字的 Unicode 字符时。 两个标识符只有在它们的每个字母或者数字具有相同的 Unicode字符时才是相同的,具 有相同外形的标识符仍然可以是不同的标识符不能与Java关键字或者布尔文字(true或者 false)相同。 2.3文字 文字( literal)是代表基本类型(§2.4.1)、 String类型(§2.4.7)或者nul类型(§2.4)的 值的源代码,字符串文字以及更一般的常数表达式的值的字符串,被用方法 String, tern“内 部化”以共享唯一的实例。 null类型有一个值,即null引用,用文字nul代表 boolean类型有两个值,用文字true和fale代表 24类型和值 Java是一种强类型的( strong typed)语言,这表示每个变量和每个表达式具有一个编译期 已知的类型。类型限制变量(§2.5)可持的值,或者表达式可产生的值,限制这些值上支持的 操作并决定这些操作的意义。强类型帮助在编译期检测错误。 Java语言的类型分成两类:基本类型( primitive type)(§2.4.1)和引用类型( reference type)(§2.4.5)。还有一个特殊的ul类型( null type),即表达或null的类型,它没有名称。 nu!引用是一个nu表达式的唯一可能的值,并且总是可以转换为任何引用类型。实际上,Ja- va程序员可以忽略null类型,而把nul假设为一个可以具有任意引用类型的特殊的文字 与基本类型和引用类型相对应,有两类数据值。它们可以被存储在变量中,被作为参数传 递,被方法返回,以及对其进行操作。它们是基本值( primitive value)(§241)和引用值(ref- erence value)(§2.4.5)。 24.1葚本类型和值 基本类型是由Java语言预定义并由一个保留字命名的类型。基本值不与别的基本值共亨 状态。一个基本类型的变量总是持有它的类型的一个基本值。 基本类型是 boolean类型和数值类型( numeric type)数值类型是整型〔 intergral types)和 浮点型( floating-point types)。 整型是byte、 short、int和long,它们的值分别是8位、16位、32位和64位有符号二进制补码 整数整型还有char,它的值是代表 Unicode字符的16位无符号整数。 浮点型是foat,它的值是32位 IEEE 754浮点数,和 double,它的值是64位TEEF754浮点 数这些浮点数在 IEEE Standard for Binary Floating- Point arithmetic,ANSI/ IEEE Stan dard754-1985(IEEE, New york)中规范IEEE754标准不仅包括正的和负的有符号数量数 字,还包括正和负零,止和负无穷( infinity),以及一个特殊的Not- a-Number值(以后缩写为 NaN)。NaN值用于代表某些操作,例如零被零除的结果。 boolean类型具有真值true和alse。 〔1)注意局部变量不是在创建时被初始化,并且只在被赋给个值时才认为它持有一个值。

...展开详情
试读 127P Java虚拟机规范中文版
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
  • 分享精英

    成功上传11个资源即可获取
关注 私信 TA的资源
上传资源赚积分or赚钱
最新推荐
Java虚拟机规范中文版 4积分/C币 立即下载
1/127
Java虚拟机规范中文版第1页
Java虚拟机规范中文版第2页
Java虚拟机规范中文版第3页
Java虚拟机规范中文版第4页
Java虚拟机规范中文版第5页
Java虚拟机规范中文版第6页
Java虚拟机规范中文版第7页
Java虚拟机规范中文版第8页
Java虚拟机规范中文版第9页
Java虚拟机规范中文版第10页
Java虚拟机规范中文版第11页
Java虚拟机规范中文版第12页
Java虚拟机规范中文版第13页
Java虚拟机规范中文版第14页
Java虚拟机规范中文版第15页
Java虚拟机规范中文版第16页
Java虚拟机规范中文版第17页
Java虚拟机规范中文版第18页
Java虚拟机规范中文版第19页
Java虚拟机规范中文版第20页

试读结束, 可继续阅读

4积分/C币 立即下载 >