我们花了几天的时间来阅读《Java虚拟机规范》,了解要实现一个虚拟机应该包括什么内容。通过这么一次阅读,我们大致了解了虚拟机规范的内容。

  • 第1章。对Java虚拟机进行了一些简单的介绍。
  • 第2章。介绍了虚拟机的结构,以及一些异常体系以及字节码指令集。可以说是规范的重点内容。
  • 第3章。介绍了编译器是如何将Java源代码编译成JVM所需要的字节码的,如何去阅读这些字节码指令。
  • 第4章。这一章针对字节码文件的格式做了详细的讲解,让我们了解字节码里的每一个字节的作用。
  • 第5章。这一章对JVM是如何启动、加载以及初始化字节码做了详细的描述。
  • 第6章。这一章节介绍了虚拟机指令集的相关知识,对虚拟机指令集的每个指令做了详细的介绍,可以当成工具书来查询使用。

通过这么一个介绍,我们可以知道第2、3、4、5章节是重点。这些章节中的Java虚拟机结构、字节码文件格式、JVM加载过程是重点,读完之后至少要弄懂这些过程。

读完这份规范,也有许多不懂的地方,例如:

  • 第3章中,将Java代码编译成字节码指令集,几乎每一章节都有对应的Java代码和字节码的对照。这需要我们耐心地一个个指令去查询和理解,这部分我在阅读的时候也是简单略过。这是后期的学习重点。
  • 本文其他部分也有不少关乎数学的严谨描述,这部分我也只是粗略扫过。这也是后期进一步学习需要加强的。

简单地说,通过阅读《Java虚拟机规范》,我从官方渠道验证了之前的一些猜想。例如:

  • JVM 就是一个虚拟机的机器,与正常的PC一样,其有内存也有指令集。
  • 准备阶段,虚拟机不执行任何字节码指令,而知识为类或接口的静态字段分配空间,并用默认值初始化这些字段。
  • boolean类型在JVM中的实现,是通过int类型来实现的。在JVM中,是没有boolean类型这一数据类型的。
  • 等等

很多时候我们会被网络上许多知识点的解释迷惑,不知道哪个说的是正确的。这个时候就需要我们去找到官方的消息渠道。而对于虚拟机来说,《Java虚拟机规范》就是这样一个官方的消息,在规范中所说的就是绝对正确的消息来源。所以说阅读《Java虚拟机规范》才显得尤为重要。

通过这一次阅读,我验证了不少之前留存下来的疑惑,也新增了不少新的疑惑。但我相信这一次阅读将会给我带来很大的积极影响,下次当我遇到虚拟机模棱两可的问题时,我会优先查找规范中的解释,之后再去参考其他的。这可以说是一种更为有效的学习方式。

如果你还没有阅读过,那么你可以跟着这个系列,与我一起阅读。也与我一样,在阅读中写下自己的想法。随着更多人能读完这本规范,我相信也有更多不同的想法蹦出,通过彼此交流,我们定能够理解得更加深刻。

JVM规范系列文章目录

JVM规范系列:总结的更多相关文章

  1. JVM规范系列开篇:为什么要读JVM规范?

    许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,<Java虚拟机规范>才是最为官方.准确的一个文档,了解这个规范可以让 ...

  2. JVM规范系列第1章:引言

    如果你还没下载<Java虚拟机规范>这本书,那么先点击这里下载再一块儿看吧. 前言 Java 虚拟机是一个抽象化的机器,整个规范中提及的 Java 虚拟机都是抽象化的概念,而不是特指 Or ...

  3. JVM规范系列第2章:Java虚拟机结构

    本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为 ...

  4. JVM规范系列第3章:为Java虚拟机编译

    Oracle 的 JDK 包括两部分内容:一部分是将 Java 源代码编译成 Java 虚拟机的指令集的编译器,另一部分是用于Java 虚拟机的运行时环境. 第一部分应该说的是 Javac 这个前置编 ...

  5. JVM规范系列第4章:Class文件格式

    这一章节讲的是字节码的整个组成格式,读懂了这一章,就读懂了字节码文件.对于这一章的学习,我更推荐作为工具书去查找.最好是找一个最简单的Hello World例子,一个字节一个字节去分析其含义.在分析过 ...

  6. JVM规范系列第5章:加载、链接与初始化

    加载是根据特定名称查找类或接口类型的二进制表示(Binary Representation),并由此二进制表示创建类或接口的过程. 加载,就是指去寻找类或接口的过程. 链接是为了让类或接口可以被 Ja ...

  7. JVM规范系列第6章:Java虚拟机指令集

    一条 Java 虚拟机指令由一个特定操作的操作码和零至多个操作所使用到的操作数所构成. 虚拟机指令 = 操作码 + 操作数. 其中,操作码值分别为 254(0xfe)和 255(0xff),助记符分别 ...

  8. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

  9. JVM基础系列第7讲:JVM 类加载机制

    当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析.运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制.JVM 虚拟机执行 class 字节 ...

随机推荐

  1. python爬虫之pyquery学习

    相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再选取 元素的文本.属性等内容的获取 pyquery执行DOM操作.css ...

  2. 辽宁移动宽带体验及魔百盒M101s-2刷机

    一.背景 坐标:辽宁 某城,移动宽带100M. 设备:移动赠送,华为光猫一只,魔百盒M101s-2电视盒子 一只,据安装人员说这个魔百盒是移动自己开发设计的. 二.上网体验 上网:浏览一般网站没问题. ...

  3. ES 使用小结

    ES 是 Elastic Search 的缩写,可以理解为一个支持分布式部署的软件. 部署了以后可以当数据库用,虽然官方不建议这样做,但我们是这样干的. 它解决了很多场景下的查询需求,发版速度飞快,用 ...

  4. 跨域访问的解决方案(非HTML5的方法:JSONP)

    http://supercharles888.blog.51cto.com/609344/856886 跨域访问一直是困扰很多开发者的问题之一.因为涉及到安全性问题,所以跨域访问默认是不可以进行的,否 ...

  5. Java面试题以及答案精选(架构师面试题)-基础题1

    基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...

  6. swift的@objc总结

    One can explicitly write @objc on any Swift declaration that can be expressed in Objective-C. @objc相 ...

  7. reorder-list 单链表

    题意: 给你一个单链表 a1 a2 a3 a4 a5....an 让你变成 a1 an a2 an-1 a3 an-2 .... 这里牵涉到,单链表的倒置和两个单链表的合并. class Soluti ...

  8. e 的由来

    https://www.zhihu.com/question/20296247 对数的发现 很多科学家发现对数螺线在自然界中广泛存在.从大如星系.台风,到小如花朵.海螺……宇宙中到处都是对数螺线的身影

  9. day14 Python百分号字符串拼接

    拼接 # -*- coding:utf8 -*- #%s字符串,%d数字msg = '%s am %s my %s is %s'% (2,"charon","pluto& ...

  10. 搭建LNMP环境(CentOS 6)

    本文档介绍如何使用一台普通配置的云服务器ECS实例搭建LNMP平台的web环境. Linux:自由和开放源码的类UNIX操作系统. Nginx:轻量级网页服务器.反向代理服务器. MySQL:关系型数 ...