写点什么

【JVM 规范】第一章 前言

作者:四月
  • 2022-12-26
    上海
  • 本文字数:1883 字

    阅读完需:约 6 分钟

【JVM规范】第一章 前言

JVM 规范-前言

本文是 JVM19 规范的个人中文译本,原文为 https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-1.html

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 File)格式。类文件包含 Java 虚拟机指令(或字节码)和符号表,以及其他辅助信息(后面文章将详细介绍)。


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


这里指定的 Java 虚拟机兼容 Java SE 19 平台,支持 Java 语言规范,Java SE 19 版中指定的 Java 编程语言。

1.3. 规范的结构

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


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


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


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


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


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


在 Java® 虚拟机规范第二版中,第 2 章概述了 Java 编程语言,该语言旨在支持 Java 虚拟机规范,但它本身并不是规范的一部分。在 Java® 虚拟机规范第二版中,第 8 章详细介绍了解释 Java 虚拟机线程与共享主内存交互的低级操作。

1.4. 符号

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


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


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

1.5. 反馈

欢迎读者向 jls-jvms-spec-comments@openjdk.java.net 报告 Java® 虚拟机规范中的技术错误和歧义。


有关 javac(Java 编程语言的参考编译器)生成和操作类文件的问题可以发送至 compiler-dev@openjdk.java.net


发布于: 刚刚阅读数: 3
用户头像

四月

关注

还未添加个人签名 2022-12-14 加入

还未添加个人简介

评论

发布
暂无评论
【JVM规范】第一章 前言_Java_四月_InfoQ写作社区