资讯专栏INFORMATION COLUMN

Java虚拟机规范(介绍)

chnmagnus / 295人阅读

摘要:此处指定的虚拟机与平台兼容,并支持语言规范中指定的编程语言。第章说明了虚拟机的指令集,按字母顺序显示操作码助记符。

介绍 一点历史

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

万维网的普及使这些属性更加有趣,Web浏览器使数百万人能够以简单的方式上网并访问富媒体内容,最后有一种介质,无论你使用的是什么机器,还是连接到快速网络或慢速调制解调器,你所看到和听到的内容基本相同。

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

HotJava浏览器首先展示了Java编程语言和平台的有趣属性,使在HTML页面中嵌入程序成为可能,程序与它们出现的HTML页面一起透明地下载到浏览器中,在被浏览器接受之前,会仔细检查程序以确保它们是安全的。与HTML页面一样,编译的程序与网络和主机无关,程序的行为方式相同,无论它们来自何处,或者它们被装入和运行的机器类型。

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

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的包的子包时,预期的引用就是由引导类加载器确定的子包。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73501.html

相关文章

  • 对于JVM,你就只知道堆和栈吗?

    摘要:下面的截图内容来自从规范我们可以看到,规范要求的运行时数据区域有程序计数器虚拟机栈堆方法区本地方法栈运行时常量池这及部分。查了一下,还是没有查到官方对于运行时数据区域的说明,但是许多博客都指出将字符串常量池移动到了堆中。 不少java程序员一提JVM运行时数据区域,就会说堆和栈,当然也有java程序员给出方法区、虚拟机栈、本地方法栈、堆、程序计数器这个答案,但是还有人给出永久代、虚拟机...

    王笑朝 评论0 收藏0
  • Java虚拟规范(目录)

    摘要:虚拟机规范介绍虚拟机介绍虚拟机的结构文件格式数据类型原始类型和值引用类型和值运行时数据区帧对象的表示浮点算术特殊方法异常指令集汇总类库公有设计,私有实现编译虚拟机格式示例使用常量局部变量和控制结构算术访问运行时常量池更多控制示例接收参数调用 Java虚拟机规范 Java SE 12 Edition 介绍 Java虚拟机介绍 Java虚拟机的结构 class文件格式 数据类型 原始类型...

    oysun 评论0 收藏0
  • 万万没想到,JVM内存结构的面试题可以问的这么难?

    摘要:方法区在实际内存空间站可以是不连续的。这一规定,可以说是给了虚拟机厂商很大的自由。但是值得注意的是,堆其实还未每一个线程单独分配了一块空间,这部分空间在分配时是线程独享的,在使用时是线程共享的。 在我的博客中,之前有很多文章介绍过JVM内存结构,相信很多看多我文章的朋友对这部分知识都有一定的了解了。 那么,请大家尝试着回答一下以下问题: 1、JVM管理的内存结构是怎样的? 2、不同的...

    CloudwiseAPM 评论0 收藏0
  • 【JVM从小白学成大佬】2.Java虚拟运行时数据区

    摘要:虚拟机在执行程序的过程中会把它所管理的内存划分为若干个不同的数据区域。栈帧栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧的概念结构如下运行时数据区脑图高 这里我们先说句题外话,相信大家在面试中经常被问到介绍Java内存模型,我在面试别人时也会经常问这个问题。但是,往往都会令我比较尴尬,我还话音未落,面试者就会背诵一段(Java虚拟...

    shuibo 评论0 收藏0
  • Java虚拟规范Java虚拟的结构)

    摘要:原始类型和值虚拟机支持的原始数据类型是数字类型布尔类型和类型。,其值为位带符号的二进制补码整数,其默认值为零。 Java虚拟机的结构 本文档指定了一个抽象机器,它没有描述Java虚拟机的任何特定实现。 要正确实现Java虚拟机,你只需要能够读取类文件格式并正确执行其中指定的操作,不属于Java虚拟机规范的实现细节会不必要地限制实现者的创造力。例如,运行时数据区的内存布局、使用的垃圾收集...

    bang590 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<