Java®编程语言是一种通用的、并发的、面向对象的语言,它的语法类似于C和C++,但它省略了许多使C和C++复杂、混乱和不安全的特性。最初开发Java平台是为了解决为联网的消费者设备构建软件的问题,它旨在支持多种主机架构,并允许安全交付软件组件,为了满足这些要求,编译后的代码必须能够在网络上传输,在任何客户端上运行,并向客户端保证运行安全。
万维网的普及使这些属性更加有趣,Web浏览器使数百万人能够以简单的方式上网并访问富媒体内容,最后有一种介质,无论你使用的是什么机器,还是连接到快速网络或慢速调制解调器,你所看到和听到的内容基本相同。
网络爱好者很快发现网络HTML文档格式支持的内容太有限了,HTML扩展(例如表单)只突出了这些限制,同时明确表示没有浏览器可以包含用户想要的所有功能,可扩展性就是答案。
HotJava浏览器首先展示了Java编程语言和平台的有趣属性,使在HTML页面中嵌入程序成为可能,程序与它们出现的HTML页面一起透明地下载到浏览器中,在被浏览器接受之前,会仔细检查程序以确保它们是安全的。与HTML页面一样,编译的程序与网络和主机无关,程序的行为方式相同,无论它们来自何处,或者它们被装入和运行的机器类型。
包含Java平台的Web浏览器不再局限于预定的一组功能,包含动态内容的网页的访问者可以确保他们的机器不会被该内容损坏,程序员可以编写程序一次,它将在任何提供Java运行时环境的机器上运行。
Java虚拟机是Java平台的基石,它是该技术的组成部分,负责其硬件和操作系统的独立性,其编译的代码很小以及保护用户免受恶意程序攻击的能力。
Java虚拟机是一种抽象计算机,像真正的计算机一样,它有一个指令集并在运行时操作各种内存区域,使用虚拟机实现编程语言是相当普遍的,最著名的虚拟机可能是UCSD Pascal的P-Code机器。
在Sun Microsystems,Inc.完成的Java虚拟机的第一个原型实现模拟了由类似于当代个人数字助理(PDA)的手持设备托管的软件中的Java虚拟机指令集。Oracle当前的实现模拟在移动、桌面和服务器设备上的Java虚拟机,但Java虚拟机不承担任何特定的实现技术、主机硬件或主机操作系统,它本身并没有被解释,但也可以通过将其指令集编译为硅CPU来实现,它也可以用微代码实现或直接用硅实现。
Java虚拟机不知道Java编程语言,只知道特定的二进制格式,即 class
文件格式, class
文件包含Java虚拟机指令(或字节码)和符号表,以及其他辅助信息。
出于安全考虑,Java虚拟机对 class
文件中的代码施加了强大的语法和结构约束,但是,任何具有可以用有效 class
文件表示的功能的语言都可以由Java虚拟机托管,由通用的、与机器无关的平台吸引,其他语言的实现者可以将Java虚拟机作为其语言的交付工具。
此处指定的Java虚拟机与Java SE 11平台兼容,并支持Java语言规范Java SE 11 Edition中指定的Java编程语言。
第2章概述了Java虚拟机架构。
第3章介绍用Java编程语言编写的代码编译成Java虚拟机指令集。
第4章说明了 class
文件格式,这是一种独立于硬件和操作系统的二进制格式,用于表示已编译的类和接口。
第5章说明了Java虚拟机的启动以及类和接口的加载、链接和初始化。
第6章说明了Java虚拟机的指令集,按字母顺序显示操作码助记符。
第7章给出了一个由操作码值索引的Java虚拟机操作码助记符表。
在Java®虚拟机规范的第二版中,第2章概述了Java编程语言,该语言旨在支持Java虚拟机的规范,但它本身并不是规范的一部分。在Java虚拟机规范Java SE 11 Edition中,有关Java编程语言的信息,请参阅Java语言规范Java SE 11 Edition。
在Java®虚拟机规范的第二版中,第8章详细介绍了解释Java虚拟机线程与共享主内存交互的低级别操作,在Java虚拟机规范Java SE 11 Edition中,读者可以参考Java语言规范的第17章,Java SE 11 Edition,了解有关线程和锁的信息,第17章反映了JSR 133专家组制作的Java内存模型和线程规范。
在整个规范中,引用了从Java SE Platform API中提取的类和接口,每当使用单个标识符 N
引用类或接口(除了在示例中声明的那些之外),预期的引用是包 java.lang
中名为 N
的类或接口,使用 java.lang
以外的包中的类或接口的完全限定名。
每当引用在包 java
或其任何子包中声明的类或接口时,预期的引用都是由引导类加载器加载的类或接口。
每当引用名为 java
的包的子包时,预期的引用就是由引导类加载器确定的子包。