JVM规范系列第1章:引言
如果你还没下载《Java虚拟机规范》这本书,那么先点击这里下载再一块儿看吧。
前言
Java 虚拟机是一个抽象化的机器,整个规范中提及的 Java 虚拟机都是抽象化的概念,而不是特指 Oracle 或者其他某一间公司的 Java 虚拟机实现。
可以看到JVM其实就是一个虚拟机的机器,与我们的普通PC一样,有内存、有CPU。JVM的内存就是运行时数据区,其CPU就是Java虚拟机指令集。
另外,我们还修正了许多《Java 虚拟机规范(第一版)》 和《Java 语言规范》 之
间不一致的内容。
Java开发者必须要搞懂的两个规范:《Java虚拟机规范》和《Java语言规范》。
在这个版本中, 我们扩充了 Class 文件格式以便支持新的 Java
语言特性,譬如泛型和变长参数方法等。
扩充了Class文件格式,便于支持泛型等特性。后续在查看Class文件格式的时候,可以重点查看相关内容。TODO
如新的字节码验证方式, 它源于 Eva Rose 的一篇硕士论文, 文中以 Java Card 平台为背景, 展示了 JVM 字节码验证的另一种全新的实现思路。 这导致了 Java MECLDC 第一版实现的诞生, 并最终成为 Java SE 平台 Class 验证过程的理论基础。关于这部分内容将会在本书的第四章中介绍①。
字节码验证也是一个不小的课题啊,标记一下,第四章看看。 TODO
引言
Java 虚拟机是整个 Java 平台的基石,是 Java 技术用以实现硬件无关与操作系统无关的关键部分,是 Java 语言生成出极小体积的编译代码的运行平台,是保障用户机器免于恶意代码损害的保护屏障。
Java虚拟机对于Java平台就是如此重要!
Java 虚拟机可以看作是一台抽象的计算机。如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域。
这里说的再次与我之前的理解是一致的,JVM就是一台抽象得计算机,有自己的CPU指令集和内存,只不过表现形式不同而已。
Java 虚拟机与 Java 语言并没有必然的联系,它只与特定的二进制文件格式——Class 文件格式所关联, Class 文件中包含了 Java 虚拟机指令集(或者称为字节码、 Bytecodes)和符号表,还有一些其他辅助信息。
Java虚拟机与Java语言并没有必然的联系,这个是学习JVM必须要懂的一个知识点。
提要
下面是JVM规范中关于个章节的提要:
第 2 章:概览了 Java 虚拟机整体架构。
第 3 章:介绍如何将 Java 语言编写的程序转换为 Java 虚拟机指令集描述。
第 4 章:定义 Class 文件格式,它是一种与硬件及操作系统无关的二进制格式,被用来表示编译后的类和接口。
第 5 章:定义 Java 虚拟机启动以及类和接口的加载、 链接和初始化过程。
第 6 章:定义 Java 虚拟机指令集,按这些指令的指令助记符的照字母顺序来表示。
第 7 章:提供了一张以操作码值为索引的 Java 虚拟机操作码助记符表
说明
这部分介绍了规范里的一些固定的格式。
- 代码块使用蓝色底
- 汇编语言使用斜体
JVM规范系列文章目录
- JVM规范系列开篇:为什么要读JVM规范?
- JVM规范系列第1章:引言
- JVM规范系列第2章:Java虚拟机结构
- JVM规范系列第3章:为Java虚拟机编译
- JVM规范系列第4章:Class文件格式
- JVM规范系列第5章:加载、链接与初始化
- JVM规范系列第6章:Java虚拟机指令集
- JVM规范系列:总结
JVM规范系列第1章:引言的更多相关文章
- JVM规范系列第2章:Java虚拟机结构
本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为 ...
- JVM规范系列第3章:为Java虚拟机编译
Oracle 的 JDK 包括两部分内容:一部分是将 Java 源代码编译成 Java 虚拟机的指令集的编译器,另一部分是用于Java 虚拟机的运行时环境. 第一部分应该说的是 Javac 这个前置编 ...
- JVM规范系列第4章:Class文件格式
这一章节讲的是字节码的整个组成格式,读懂了这一章,就读懂了字节码文件.对于这一章的学习,我更推荐作为工具书去查找.最好是找一个最简单的Hello World例子,一个字节一个字节去分析其含义.在分析过 ...
- JVM规范系列第5章:加载、链接与初始化
加载是根据特定名称查找类或接口类型的二进制表示(Binary Representation),并由此二进制表示创建类或接口的过程. 加载,就是指去寻找类或接口的过程. 链接是为了让类或接口可以被 Ja ...
- JVM规范系列第6章:Java虚拟机指令集
一条 Java 虚拟机指令由一个特定操作的操作码和零至多个操作所使用到的操作数所构成. 虚拟机指令 = 操作码 + 操作数. 其中,操作码值分别为 254(0xfe)和 255(0xff),助记符分别 ...
- JVM规范系列开篇:为什么要读JVM规范?
许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,<Java虚拟机规范>才是最为官方.准确的一个文档,了解这个规范可以让 ...
- JVM规范系列:总结
我们花了几天的时间来阅读<Java虚拟机规范>,了解要实现一个虚拟机应该包括什么内容.通过这么一次阅读,我们大致了解了虚拟机规范的内容. 第1章.对Java虚拟机进行了一些简单的介绍. 第 ...
- USB 3.0规范中译本 第1章 引言
本文为CoryXie原创译文,转载及有任何问题请联系cory.xie#gmail.com. 1.1 动机(Motivation) Universal Serial Bus (USB) 的原始动机来自于 ...
- JVM基础系列第8讲:JVM 垃圾回收机制
在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...
随机推荐
- js replace替换 忽略大小写问题
实现就是控制台的内容“abc”,但是后台返回的是“ABC”,这个时候在前台遍历,需要将后台返回的在控制台标红. 当然控制台可以是 abc Abc等大小写混合,以下代码都可替换. var flagnew ...
- (小技巧)Sql server查看sql语句的执行时间(转)
转自CSDN: 在写数据库sql的时候,我们往往很关心该sql语句的执行效率,如下小技巧可以帮助程序员简单快速的得到某条或某几条sql的执行时间. declare @d datetime set @d ...
- (后端)sql server 按时间段查询
百度的资料,保存下来: 在写按时间段查询的sql语句的时候 一般我们会这么写查询条件: where date>='2010-01-01' and date<='2010-10-1'. 但是 ...
- 洗礼灵魂,修炼python(32)--面向对象编程(2)—进一步认识类
上一篇文章已经看到了如何定义类,但是我想你应该有很多疑惑的吧?最好的学习方法就是不断思考,不断问为什么,不断和已有知识做类比,从中获得理解.那么这一篇博文就是从解惑答疑中进一步认识类. 解惑答疑 我按 ...
- C# RSA 加密
class Sign_verifySign { #region prepare string to sign. //example format: a=123&b=xxx&c (wit ...
- 转:日志插件 log4net 的使用
文本格式说明 可以记载的日志类别包括:FATAL(致命错误).ERROR(一般错误).WARN(警告).INFO(一般信息).DEBUG(调试信息). 文本参数说明 %m(message):输出的日志 ...
- Vim命令图解及快捷键讲解
快捷键详解
- 解决windows下git push卡住问题的方法
问题描述: 在windows下向使用git协议传输的Git Repo进行push时会卡住. -- 这是windows上的msysgit的bug,在新版本上已经修复,但要在.gitconfig中做一项配 ...
- PJ初赛复习日记
PA姑娘的PJ初赛复习日记 by Pleiades_Antares PJ初赛考试马上就要开始了(今年应该是10.13吧?),作为蒟蒻的我们怎么能不复习呢? 众所周知,复习方法有很多很多种-- 比如 ( ...
- map的使用注意事项
map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取 map的长度是不固定的,也就是和slice一样,也是一种引用类型 内置的len函数同样适用于map,返回 ...