前言
计算机艺术的魅力在于其严谨性和复杂性。无论是股票交易还是人机国际象棋大战,所有的程序运行所需要的底层机器指令都只是有限的若十条。从大型的UNIX机器到桌面个人计算机,无不基于那些设计精良而优美的指令集。但是这些指令集之间不兼容,这就使得程序的移植变得非常困难,所需时间甚至超过了重新编写一遍的时间。于是,虚拟机的概念出现了。Java虚拟机(JVM)在多个平台上实现统一语言; .NET的虚拟机 (目前)在单一平台上实现多种语言。但无论如何,它们都是抽象的计算机。尽管它们都有自己的指令集,自己的内存体系。但它们却往往比实际的硬件机器简单明了。分析这样的一个虚拟机,对提高读者对底层硬件和虚拟机平台的理解大有裨益。
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。
传送门:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ。
本书介绍
本书讲述了Java虚拟机一运行所有Java程序的抽象计算机,还讲了几种与虚拟机密切相关的核心Java API。本书通过分析讲解、可运行的示例、参考资料和applet (它作为文中所述概念的交互式例示),提供了Java技术的深人概览。Java编程语言似平将要成为继C和C++之后的下一门流行的主流商业软件开发语言,之所以这样的一个基本原因是,Java的体系结构能帮助程序员适应发展的硬件环境,Java具有 在硬件环境中按照要求切换的特性,这都是由Java虚拟机提供的能力。编程语言革命由硬件的发展所推动(当然还有更多推动力)。硬件在飞速发展,变得更加廉价且功能更加强大,软件变得越来越庞大、越来越复杂。从汇编语言到结构化语言的转变(比如C),以及到面向对象语言的转变(比如C++),在很大程度上是为了满足管理更高复杂度软件的需要不断强大的硬件使得复 杂度可能更高。
本书读者对象
本书主要是针对想了解Java技术的专业软件开发旨和学生编写的。我假设读者对Java语已经比较熟悉(但不需要精通),阅读本书会帮助读者深入理解Java编程知识。如果你是编写Java编译器或者编写Java虑报机实现的少数精英之一,本书可以看作是对Java虚拟机规范的补充,书中对规范做出了解释。
第1-4章(本书的第-部分)给出了Java体系结构的总览,包括隐藏在EJava体系结构设计背后的动机。这几章展示了Java虛拟机是如何与Java体系结构的其他组成部分(class文件、API和编程语言)相互关联的。如果想对Java技术有一个基础的了解,请阅读这些章节。下面是这部分的提要。
第1章“Java体系结构介绍”,在Java体 系结构的概览和内部细节讨论上做了合理取舍。
第2章“平台无关”,讨论了平台无关的确切含义。Java体 系结构是如何支持这个特性的,以.及创建平台无关的Java程序的步骤。
第3章“安全".描述了Java核心体系内置的安全模型,包含-个经精心制作的、可运行的例子,该例子示范了1.2版Java安全框架中的细粒访问控制的好处,
第4章“网络移动性",讨论了网络移动软件的新范型。Java内部技术教程
第5~ 20章(本书的第二部分)给出了Java虛拟机和相关核心Java API内部工作的深人技术描述,这些章节会帮助读者理解Javu程序的实际运作情况。第二部分内容按照教程的方式组织,有很多示例。下面是这部分的提要。
第5章“Java虚拟机", 给出了对Java虚拟机内部J.作的全面概览。
第6章“"Java class文件”,是一份关于class文件格式的完整的教程和参考。如果你F任解析.生成或者比较关注Java class文件,那么这一章非看不可。
第7章“类型的生命周期",讨论了类在ava建拟机中的完整的生命周期,包含类被卸载的环境。
第8章“连接模型"”,完整解释了Java的连接模型,包括使用frNane ( )和类装载器的例子,以便在运行时用新类型对Javali用程序进行动态扩展。
第9章“垃圾收集”.讨论了垃圾收集和终结( fnazain),解释了什么是软、弱和影子引用,也提出[如何使用终结方法。
第10~ 19章是关于Java虚拟机指令集的教程。
第20章“线程同步”,解释了什么叫做监视器,以及如何使用它们编号线程安全的JEva代码。class文件和指令集参考
第6章除了作为Java class文件的教程之外,同时也是class文件格式的完整参考。 同样,第10—20章构成了Java虚拟机指令集的教程,而附录A—C是指令集的完整参考。如果读者需要查阅有关指令的内容,请参见这些章节和附录。
第一章 Java体系结构介绍:对Java技术做了介绍, 给出了Java体系结构的纵览,讨论了为什么Java很重要以及Java的优缺点。
1.1.png
第二章 平台无关:展示了Jaw体 系结构是如何让程序在任何平台上运行的,讨论了决定Jav程序实际可移植性的要素,还考察了如何在可移植性及性能方面保持相应的平衡。
2.png
2.1.png
2.2.png
第三章 安全:对内置于Java核心体系中的安全模型进行了深人概述,追踪了Java安全模型的演变过程一从1.0版本的沙箱到1.1 版本的代码签名和验证,再到1 2版本的细粒度访问控制。
3.png
3.1.png
第四章 网络移动性:考察了Java带来的网络移动软件的新范型,并且展示了Java体系结构是如何让这项功能得以实现的。
4.png
4.1.png
第五章 Java虚拟机:给出了Java虛拟机内邵体系的详细概述。随书光盘上与该章对应的applet叫做“Eternal Math",它模拟了Java虚拟机执行一小段Java字节码的情况。
5.png
5.1.png
第六章 Java class文件:讲述C了lass文件的内容, 包括常量池的结构和格式。这一章既可以作为Java clas文件格式的教程,也可以作为class文件的完整参考。随书光盘上与该章对应的applet叫做"Cetting ;Loaded" ,它模拟了Java虚拟机装载-一个Java cas文件的过程。
6.png
6.1.png
6.12.png
第七章 类型的生命周期:对一个类型(类或者接口)的生命周期(从类型进入虚拟机到它最终退出)进行跟踪。该章还讨论了装载、连接和初始化的过程:还有如何创建对象示例,垃圾收集和终结;以及类型卸载。
7.png
7.1.png
7.2.png
第八章 连接模型:深入考察了Java的连接模型, 描述了类装载器的双亲委派模型、常量池解析、命名空间和装载约束。这一章还揭示了如何使用forName ( )和类装载器,以便可以在运行时动态扩展Java应用程序。
8.png
8.1.png
第九章 垃圾收集:讲述了 垃圾收集的几种不同技术,解释了虑拟机中垃圾收集的工作原理一包含对火车算法以及对软引用、弱引用和影子引用的讨论。随书光盘t.与该章对应的applet叫做"Heapof Fish”,它模拟了一个压缩的、“标记并清除”的垃圾收集堆。
9.png
9.1.png
第十章 栈和局部变里操作:讲述了用于操作数栈的Java虛拟机指令一 把常数压人栈、 进行通常的栈操作、在局部变量和栈之间互相传递数值等等。随书光盘上对应该章的applet是“Fibonacci Forever",它模拟了Java虛拟机执行一个方法(该方法产生斐波那契序列)的过程。
10.png
10.1.png
第十一章 类型转换:讲述了 在主要类型之间互相转换数值的指令。随书光盘上对应该章的applet是"Conversion Diversion",它模拟了Java虚拟机执行一个方法(它进行类型转换)的过程。
11.png
11.1.png
11.2.png
第十二章 整数运算:讲述了 Java康拟机中的整数算法,解释了二进制补码算法,列出了用于整数计算的指令集。随书光盘上对应该章的有两个applet,它们以交互式例示形式描绘了该章的内容:其中一个applet叫做“Inner Int",它可以让读者查肴并操作二进制补码;另-个叫做“Prime Time" ,它模拟了Java虚拟机执行一一个方法(它生成质数)的过程。
12.png
12.1.png
第十三章 逻辑运算:讲述 了Java虚拟机内部进行逐位运算、逻辑运算的指令,这些指令包括对整数进行小数点移位和Boolean(布尔)操作的操作码。随书光盘上:对应该章的applet叫做"Logical Results",它模拟了Java虚拟机执行一个方法(该方法使用一些逻辑操作码)的过程。
13.png
13.1.png
第十四章 浮点运算:介绍了 浮点数和ava虚拟机中执行浮点运算的指令,包括对strictip 关键字的讨论和出现在第2版Java虚拟机规范中的修改过后的浮点规则。随书光盘上有两个使用交互式例示来阐述该章内容的applet,一个名为"Inner FPloat”的applet能用来对组成浮点数的各个部分进行观察和操作,另一个名为“Circle of Squares"的applet能对Java虚拟机进行模拟,模拟它执行一个方法(它使用浮点操作码)的情况。
14.png
14.1.png
第十五章 对象和数组:讲述了 创建和操作对象和数组的Java虚拟机指令。随书光盘中为该章准备了一个名为"Tbree Dimensional Array” 的applet, 它模拟了Java虚拟机执行一个方法 (它分配和初始化三维数组)的过程。
15.png
15.1.png
第十六章 控制流:介绍了 控制Java虚拟机在同-个方法中进行条作或者无条件分支操作的指令。随书光盘中为该章准备了一个名为“Saying Tomato”的applet, 它模拟了Java虚拟机执行一个方法的过程.该方法包含完成表跳转的字节码( Java源代码中switch语句编译后的版本)
16.png
16.1.png
第十七章 异常:对字节码实现异常的方式、显式抛出异常的指令、异常表以及catch了句的工作万式进行了描述。随书光盘中为该章准备了一个名为“Play Ball!" 的applet, 它模拟了Java虚拟机执行一个方法(它抛出及捕获异常)的过程。
17.png
17.1.png
第十八章 finally子句:介绍finally子句在字节码中实现的方式,并举例介绍了相关指令。该章还对Java源代码中finally子句所展现的一些令人惊讶的特性进行了描述,并在字节码层对此特性做出「解释。随书光盘中为该章准备了一个名为“Hop Around” 的applet, 它模拟了Java虚拟机执行一个方法(它包含finally子句)的过程。
18.png
18.1.png
第十九章 方法的调用与返回:对Java虚 拟机用来调用方法的四条指令以及使用这四条指令的环境进行了介绍。
19.png
19.1.png
第二十章 线程同步:讲述了监视器( Java用来支持同步的机制),并阐述了Java虛拟机使月它们的方式。该章还描述了指令集在数据的锁定和解锁方面对监视器的支持。
20.png
20.1.png
20.2.png
网友评论