《Java虚拟机规范(Java
SE 7版)》作者:Tim Lindholm、Frank Yellin、Gilad Bracha、Alex Buckley 摘要:第二章 Java虚拟机结构(第1部分)

本规范描写叙述的是一种抽象化的虚拟机的行为,而不是不论什么一种被广泛使用的虚拟机实现。

2.1 Class 文件格式

编译后被Java虚拟机所运行的代码使用了一种平台中立(不依赖于特定硬件及操作系统的)的二进制格式来表示,而且常常(但并不是绝对)以文件的形式存储。因此这样的格式被称为Class文件格式。

2.2 数据类型

Java虚拟机能够操作的数据类型:原始类型(Primitive Types)和引用类型(Reference
Types)。与之相应,也存在有原始值(Primitive Values)和引用值(Reference
Values)两种类型的数值可用于变量赋值、參数传递、方法返回和运算操作

Java虚拟机是直接支持对象的(实例)

使用reference类型来表示对某个对象的引用

2.3 原始类型与值

Java虚拟机所支持的原始数据类型包含了数值类型布尔类型returnAddress类型三类。

当中数值类型又分为整型类型和浮点类型两种

整数类型包含:

  • byte类型:值为8位有符号二进制补码整数,默认值为零。
  • short类型:值为16位有符号二进制补码整数,默认值为零。
  • int类型:值为32位有符号二进制补码整数,默认值为零。
  • long类型:值为64位有符号二进制补码整数。默认值为零。
  • char类型:值为使用16位无符号整数表示的、指向基本多文本平面(Basic Multilingual Plane,BMP)的Unicode值,以UTF-16编码,默认值为Unicode的null值('\u0000')。

浮点类型包含:

  • float类型:值为单精度浮点数集合中的元素,或者(假设虚拟机支持的话)是单精度扩展指数(Float-Extended-Exponent)集合中的元素。默认值为正数零。
  • double类型:取值范围是双精度浮点数集合中的元素。或者(假设虚拟机支持的话)是双精度扩展指数(Double-Extended-Exponent)集合中的元素。默认值为正数零。

布尔类型包含:

  • boolean类型:取值范围为布尔值true和false,默认值为false。

returnAddress类型包含:

  • returnAddress类型:表示一条字节码指令的操作码(Opcode)。在全部的虚拟机支持的原始类型之中,仅仅有returnAddress类型是不能直接Java语言的数据类型相应起来的。

2.3.1 整型类型与整型值

2.3.2 浮点类型、取值集合及浮点值

IEEE 754标准的内容不仅包含了正负带符号可数的数值(Sign-Magnitude Numbers),还包含了正负零正负无穷大和一个特殊的“非数字”标识(Not-a-Number,下文用NaN表示)。NaN值用于表示某些无效的运算操作,比如除数为零等情况。

顺序将会是:负无穷,可数负数、正负零、可数正数、正无穷。

浮点数中。正数零和负数零是相等的,可是它们有一些操作会有差别。比如1.0除以0.0会产生正无穷大的结果。而1.0除以-0.0则会产生负无穷大的结果。

NaN是无序的,对它进行不论什么的数值比較和等值測试都会返回false的比較结果。不论什么数字与NaN进行非等值比較都会返回true。

2.3.3 returnAddress类型和值

2.3.4 boolean类型

在Java语言之中涉及到boolean类型值的运算,在编译之后都使用Java虚拟机中的int数据类型来取代。

Java虚拟机直接支持boolean类型的数组,虚拟机的newarray指令能够创建这样的数组,数组类型的訪问与改动共用byte类型数组的baload和bastore指令。

2.4 引用类型与值

三种引用类型:类类型(Class Types)、数组类型(Array
Types)和接口类型(Interface Types)。

数组类型还包含一个单一维度(即长度不由其类型决定)的组件类型(Component Type),一个数组的组件类型也能够是数组。多层最里面的类型是数组类型的元素类型(Element Type),必须上面三个类型之中的一个。

引用类型的默认值是null。

【Java虚拟机结构(第1部分)数据类型】摘要的更多相关文章

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

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

  2. Java虚拟机 - 结构原理与运行时数据区域

    http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...

  3. Java 虚拟机结构

    一 数据类型 与 Java 程序语言中的数据类型相似,Java 虚拟机可以操作的数据类型可分为两类:原始类型(Primitive Types,也经常翻译为原生类型或者基本类型)和引用类型(Refere ...

  4. 每日一问:你了解 Java 虚拟机结构么?

    对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...

  5. Jvm运行时数据区 —— Java虚拟机结构小记

    关于jvm虚拟机的文章网上都讲烂了.尤其是jvm运行时数据区的内容. 抱着眼见为实的想法,自己翻了翻JVM规范,花了点时间稍微梳理了一下. 以下是阅读Java虚拟机规范(Java SE 8版)的第二章 ...

  6. Java虚拟机结构

    一.JVM主要的结构如下: 二.各个区域功能介绍 1).方法区(Method Area):         (1)用于存储虚拟机加载的类信息.常量.静态变量等,是各个线程共享的内存区域:       ...

  7. java虚拟机规范(se8)——java虚拟机结构(一)

    本文翻译自:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html 第二章 虚拟机结构 本文档描述了一个抽象的虚拟机规范,并不描述 ...

  8. java虚拟机规范(se8)——java虚拟机结构(六)

    2.11 指令集简介 java虚拟机指令由一个字节的操作码,接着时0个或多个操作数组成,操作码描述了执行的操作,操作数提供了操作所需的参数或者数据.许多指令没有操作数只包含一个操作码. 如果忽略异常处 ...

  9. The Structure of the Java Virtual Machine Java虚拟机结构 虚拟机内存模型

    小结: 1.实现一台Java虚拟机,只需正确读取class文件中的每一条字节码指令且能正确执行这些指令所蕴含的操作. 2.设计者决定:运行时数据区的内存如何布局,选择哪种垃圾收集算法,是否对虚拟机字节 ...

随机推荐

  1. C# Winform 跨线程更新UI控件常用方法汇总

    https://www.cnblogs.com/marshal-m/p/3201051.html

  2. OpenFileDialog 打开文件对话框

    InitialDirectory 对话框的初始目录 Filter 要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*" Filt ...

  3. C#单元测试:NUnit详细使用方法

    1. TDD的简介 首先什么是TDD呢?Kent Beck在他的<<测试驱动开发 >>(Addison-Wesley Professional,2003)一书中,使用下面2个原 ...

  4. g2o error

    /home/lzp/slamtest/graduationcode/p3/poseestimation/pose_estimation_3d2d.cpp: In function ‘void bund ...

  5. IniHelper——INI操作辅助类

    使用INI配置文件,简单便捷. 该辅助工具类为C#操作INI文件的辅助类,源码在某位师傅的基础上完善的来,因为忘记最初的来源了,因此不能提及引用,在此深感遗憾,并对贡献者表示感谢. using Sys ...

  6. Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML

    一.Oracle数据库介绍 1.基本介绍 Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/ ...

  7. C++11:实用特性

    今天逛cplusplus.com发现C++还真多了不少方便使用的特性,先了解些最常用的 初始化列表 vector<,,,}); vector<pair<int, int> &g ...

  8. css,js移动资源

    随着移动市场的逐步扩大及相关技术的日趋完善,对前端开发提出了新的岗位要求,在继承前人成果的基础上需要在新的历史条件下有新的创新.移动端的开发,虽然没有IE6众多问题的折磨,但是多平台,多设备的兼容,也 ...

  9. UTF-8和GBK编码转换iconv

    iconv("GBK", "UTF-8", $str);//将GBK编码转换成UTF8编码

  10. 基于Vue的WebApp项目开发(四)

    实现新闻咨询页面 目录结构 步骤一:创建newslist.vue文件 <template> <div id="tml"> <!--使用mui框架,实现 ...