首页 > 编程语言 >java虚拟机规范(1)

java虚拟机规范(1)

时间:2022-12-13 18:14:15浏览次数:71  
标签:Java 编程语言 虚拟机 规范 接口 java SE

第一章简介

1.1. 一点历史

Java ® 编程语言是一种通用的、并发的、面向对象的语言。它的语法类似于 C 和 C++,但它省略了许多使 C 和 C++ 变得复杂、混乱和不安全的特性。Java 平台最初是为了解决为网络消费设备构建软件的问题而开发的。它旨在支持多种主机架构并允许安全交付软件组件。为了满足这些要求,编译后的代码必须能够跨网络传输,在任何客户端上运行,并向客户端保证它可以安全运行。

万维网的普及使这些属性变得更加有趣。Web 浏览器使数百万人能够以简单的方式上网冲浪和访问富媒体内容。终于出现了一种媒体,无论您使用的是什么机器,也不管它是连接到快速网络还是慢速调制解调器,您所看到和听到的基本上都是一样的。

Web 爱好者很快发现 Web 的 HTML 文档格式支持的内容太有限了。HTML 扩展,如表单,只强调了这些限制,同时明确表示没有浏览器可以包含用户想要的所有功能。可扩展性就是答案。

HotJava 浏览器首先展示了 Java 编程语言和平台的有趣特性,它使在 HTML 页面中嵌入程序成为可能。程序连同它们出现的 HTML 页面被透明地下载到浏览器中。在被浏览器接受之前,程序会被仔细检查以确保它们是安全的。与 HTML 页面一样,编译后的程序与网络和主机无关。这些程序的行为方式是相同的,无论它们来自哪里,也不管它们被加载到何种机器上运行。

包含 Java 平台的 Web 浏览器不再局限于一组预先确定的功能。包含动态内容的网页的访问者可以放心,他们的机器不会被该内容损坏。程序员只需编写一次程序,就可以在任何提供 Java 运行时环境的机器上运行。

1.2. Java 虚拟机

Java虚拟机是Java平台的基石。它是负责硬件和操作系统独立性、编译代码的小尺寸以及保护用户免受恶意程序侵害的技术组件。

Java虚拟机是一种抽象的计算机器。就像真正的计算机器一样,它有一个指令集并在运行时操作各种内存区域。使用虚拟机实现编程语言是相当普遍的;最著名的虚拟机可能是 UCSD Pascal 的 P-Code 机器。

Java 虚拟机的第一个原型实现由 Sun Microsystems, Inc. 完成,它在类似于现代个人数字助理 (PDA) 的手持设备托管的软件中模拟了 Java 虚拟机指令集。Oracle 当前的实现在移动、桌面和服务器设备上模拟 Java 虚拟机,但 Java 虚拟机不采用任何特定的实现技术、主机硬件或主机操作系统。它本身并没有被解释,但也可以通过将其指令集编译为硅 CPU 的指令集来实现。它也可以用微代码或直接用硅来实现。

Java 虚拟机对 Java 编程语言一无所知,只知道一种特定的二进制格式,即class文件格式。一个class文件包含 Java 虚拟机指令(或字节码)和一个符号表,以及其他辅助信息。

为了安全起见,Java 虚拟机对文件中的代码施加了强大的语法和结构约束class。但是,任何具有可以用有效class文件表示的功能的语言都可以由 Java 虚拟机托管。受到普遍可用的、独立于机器的平台的吸引,其他语言的实现者可以转向 Java 虚拟机作为他们语言的交付工具。

这里指定的Java虚拟机兼容Java SE 8平台,支持The Java Language Specification, Java SE 8 Edition中指定的Java编程语言。

1.3. 规范的组织

第 2 章概述了 Java 虚拟机体系结构。

第 3 章介绍了将 Java 编程语言编写的代码编译成 Java 虚拟机指令集的过程。

第 4 章指定 class文件格式,独立于硬件和操作系统的二进制格式,用于表示已编译的类和接口。

第 5 章详细说明了 Java 虚拟机的启动以及类和接口的加载、链接和初始化。

第6章详细介绍了Java虚拟机的指令集,按照操作码助记符的字母顺序呈现指令。

第 7 章给出了一个由操作码值索引的 Java 虚拟机操作码助记符表。

在Java ® 虚拟机规范第二版中 ,第 2 章概述了 Java 编程语言,该语言旨在支持 Java 虚拟机规范,但它本身并不是规范的一部分。在Java 虚拟机规范,Java SE 8 版中,读者可以参考 Java 语言规范,Java SE 8 版,了解有关 Java 编程语言的信息。形式的引用:(JLS §xy) 指出这是必要的。

在The Java ® Virtual Machine Specification第二版中 ,第 8 章详细介绍了解释 Java 虚拟机线程与共享主内存交互的低级操作。在The Java Virtual Machine Specification, Java SE 8 Edition中,读者可以参考 The Java Language Specification, Java SE 8 Edition的第 17 章,了解有关线程和锁的信息。第 17 章反映了JSR 133 专家组制定的 Java 内存模型和线程规范。

1.4. 符号

在本规范中,我们指的是从 Java SE 平台 API 中提取的类和接口。每当我们使用单个标识符N引用类或接口(示例中声明的类或接口除外)时,预期的引用是指包中 名为Njava.lang的类或接口。我们对 . 以外的包中的类或接口使用完全限定名称java.lang。

每当我们引用在包java 或其任何子包中声明的类或接口时,预期的引用是指由引导类加载器加载的类或接口(§5.3.1)。

每当我们引用名为 的包的子包时java,预期的引用就是由引导类加载器确定的那个子包。

本规范中字体的使用如下:

字体fixed width用于 Java 虚拟机数据类型、异常、错误、class文件结构、Prolog 代码和 Java 代码片段。

斜体用于 Java 虚拟机“汇编语言”、它的操作码和操作数,以及 Java 虚拟机运行时数据区域中的项目。它也用于引入新术语并仅用于强调。

旨在阐明规范的非规范性信息以较小的缩进文本给出。

这是非规范信息。它提供直觉、基本原理、建议、示例等。

来源

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-1.html

标签:Java,编程语言,虚拟机,规范,接口,java,SE
From: https://www.cnblogs.com/carry1899/p/16979511.html

相关文章