【Java虚拟机结构(第1部分)数据类型】摘要
《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部分)数据类型】摘要的更多相关文章
- JVM规范系列第2章:Java虚拟机结构
本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为 ...
- Java虚拟机 - 结构原理与运行时数据区域
http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...
- Java 虚拟机结构
一 数据类型 与 Java 程序语言中的数据类型相似,Java 虚拟机可以操作的数据类型可分为两类:原始类型(Primitive Types,也经常翻译为原生类型或者基本类型)和引用类型(Refere ...
- 每日一问:你了解 Java 虚拟机结构么?
对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...
- Jvm运行时数据区 —— Java虚拟机结构小记
关于jvm虚拟机的文章网上都讲烂了.尤其是jvm运行时数据区的内容. 抱着眼见为实的想法,自己翻了翻JVM规范,花了点时间稍微梳理了一下. 以下是阅读Java虚拟机规范(Java SE 8版)的第二章 ...
- Java虚拟机结构
一.JVM主要的结构如下: 二.各个区域功能介绍 1).方法区(Method Area): (1)用于存储虚拟机加载的类信息.常量.静态变量等,是各个线程共享的内存区域: ...
- java虚拟机规范(se8)——java虚拟机结构(一)
本文翻译自:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html 第二章 虚拟机结构 本文档描述了一个抽象的虚拟机规范,并不描述 ...
- java虚拟机规范(se8)——java虚拟机结构(六)
2.11 指令集简介 java虚拟机指令由一个字节的操作码,接着时0个或多个操作数组成,操作码描述了执行的操作,操作数提供了操作所需的参数或者数据.许多指令没有操作数只包含一个操作码. 如果忽略异常处 ...
- The Structure of the Java Virtual Machine Java虚拟机结构 虚拟机内存模型
小结: 1.实现一台Java虚拟机,只需正确读取class文件中的每一条字节码指令且能正确执行这些指令所蕴含的操作. 2.设计者决定:运行时数据区的内存如何布局,选择哪种垃圾收集算法,是否对虚拟机字节 ...
随机推荐
- 动态生成自定义控件ascx如何给ascx传值
有机会看到有网友在论坛上发出问题: 在网页上的铵钮执行之后,动态加载的用户控件,如果没有处理好,会在子用户控件的铵钮被执行时抛弃.因此我们需要着重需要处理的关键点.同相子用户控件在动态加载之后,它的状 ...
- 使用PowerShell创建SSAS Role
PowerShell, SSAS, Role, DatabasePermission, Cube, Dimension, CubePermission, CubeDimensionCube 在SSAS ...
- Cookie,Sesstion,Application 缓存。
Cookie客户端缓存. 1.引言 随着浏览器的处理能力不断增强,越来越多的网站开始考虑将数据存储在「客户端」,那么久不得不谈本地存储了. 本地存储的好处: 一是避免取回数据前页面一片空白,如果不需要 ...
- 自定义Jquery插件——由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件
由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件下面是代码: // 掉用方式支持 $('select').textBeauty(1 ...
- IDEA 如何加上 tomcat
前言: idea 上已经有一个 tomcat 了,因为这个 tomcat 为 32 的,需要加一个 64 为的 tomcat . 第一步: 第二步: 第三步: 点击 OK 就好. 结果:
- 关于VUE中 import 、 export 和 export default 的注意问题
1.import引入一个依赖包,不需要相对路径.import 引入一个自己写的js文件,是需要相对路径的. 示例:import axios from ‘axios’; import AppServic ...
- HTML网页随笔笔记
文档设置标记 1.格式标记 1.<br> 强制换行标记 让后面的文字.图片.表格等等,显示在下一行 2.<p> 换段落标记 换段落,由于多个空格和回车在HTML中会被等效为 ...
- Freebsd10.3(FreeBSD11 Beta1)使用手记
Freebsd10.3(FreeBSD11 Beta1)使用手记 1.安装系统. 2.设置ssh2登录,并开启ftp. (1)编辑/etc/ssh/sshd_config文件,设置如下: Permit ...
- How to fix Mysql table crashes
Whenever you enconter this: Please use mysql_upgrade to fix this error. or using mysql_upgrade -u r ...
- Android Fragment重要函数
Fragment的常用函数: 一.Fragment对象 1.void setArguments(Bundle args); 这个函数为Fragment提供构造参数(也就是数据),参数以Bundle类型 ...