翻译:JVM虚拟机规范1.7中的运行时常量池部分(二)
本篇为JVM虚拟机规范1.7中的运行时常量池部分系列的第二篇。
4.4.4. The CONSTANT_Integer_info and CONSTANT_Float_info Structures
The CONSTANT_Integer_info and CONSTANT_Float_info structures represent 4-byte numeric (int and float) constants:
代表4字节的数字常量,如int和float:

The items of these structures are as follows:
- tag
-
The
tagitem of theCONSTANT_Integer_infostructure has the valueCONSTANT_Integer(3).The
tagitem of theCONSTANT_Float_infostructure has the valueCONSTANT_Float(4).类型分别必须为
CONSTANT_Integer和CONSTANT_Float - bytes
-
The
bytesitem of theCONSTANT_Integer_infostructure represents the value of theintconstant. The bytes of the value are stored in big-endian (high byte first) order.The
bytesitem of theCONSTANT_Float_infostructure represents the value of thefloatconstant in IEEE 754 floating-point single format (§2.3.2). The bytes of the single format representation are stored in big-endian (high byte first) order.The value represented by the
CONSTANT_Float_infostructure is determined as follows. The bytes of the value are first converted into anintconstant bits. Then:If bits is
0x7f800000, thefloatvalue will be positive infinity.If bits is
0xff800000, thefloatvalue will be negative infinity.If bits is in the range
0x7f800001through0x7fffffffor in the range0xff800001through0xffffffff, thefloatvalue will be NaN.
In all other cases, let s, e, and m be three values that might be computed from bits:

bytes在CONSTANT_Integer_info 中代表int常量的值。大端序(高字节在前)存储
bytes在CONSTANT_Float_info 中代表以IEEE 754 浮点数格式存储的float常量。大端序存储。
CONSTANT_Float_info结构体的内容按照如下规则。bytes的值首先被转换为int常量比特,然后:
如果bits是0x7f800000,那么浮点值为正无穷。
如果bits是0xff800000,那么浮点值为负无穷。
如果bits是在0x7f800001 到0x7fffffff或者0xff800001到0xffffffff,值为NaN。
其他情况,参考上图算出s,e,m,则值为 s · m · 2e-150.
4.4.5. The CONSTANT_Long_info and CONSTANT_Double_info Structures
-
看看它的存储结构体:

其余和int和float差不多,只是变成了两个4字节来存储。
4.4.6. The CONSTANT_NameAndType_info Structure
The CONSTANT_NameAndType_info structure is used to represent a field or method, without indicating which class or interface type it belongs to:
代表一个字段或者方法,没标识属于哪个类或者接口:

The items of the CONSTANT_NameAndType_info structure are as follows:
条目如下:
- tag
-
The
tagitem of theCONSTANT_NameAndType_infostructure has the valueCONSTANT_NameAndType(12).tag值为
CONSTANT_NameAndType - name_index
-
The value of the
name_indexitem must be a valid index into theconstant_pooltable. Theconstant_poolentry at that index must be aCONSTANT_Utf8_infostructure (§4.4.7) representing either the special method name<init>(§2.9) or a valid unqualified name denoting a field or method (§4.2.2).name_index项必须为有效索引项。必须指向
CONSTANT_Utf8_info结构体,代表特殊方法名,如<init>或者一个有效的相对名标识字段或方法。 - descriptor_index
-
The value of the
descriptor_indexitem must be a valid index into theconstant_pooltable. Theconstant_poolentry at that index must be aCONSTANT_Utf8_infostructure (§4.4.7) representing a valid field descriptor or method descriptor (§4.3.2, §4.3.3).
值必须为有效索引。必须指向CONSTANT_Utf8_info ,代表有效的字段描述符或者方法描述符。(应该是一个域前面的那些:private,static,final之类的修饰符吧)
翻译:JVM虚拟机规范1.7中的运行时常量池部分(二)的更多相关文章
- 翻译:JVM虚拟机规范1.7中的运行时常量池部分(一)
原文链接: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4 Java Virtual Machine i ...
- 翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)
4.4.7. The CONSTANT_Utf8_info Structure The CONSTANT_Utf8_info structure is used to represent consta ...
- 类的加载,链接和初始化——1运行时常量池(来自于java虚拟机规范英文版本+本人的翻译和理解)
加载(loading):通过一个特定的名字,找到类或接口的二进制表示,并通过这个二进制表示创建一个类或接口的过程. 链接:是获取类或接口并把它结合到JVM的运行时状态中,以让类或接口可以被执行 初始化 ...
- 深入理解JVM虚拟机:(一)Java运行时数据区域
概述 JVM是Java语言的精髓所在,因为它Java语言实现了跨平台运行,以及自动内存管理机制等,本文将从概念上介绍JVM内存的各个区域,说明个区域的作用. JVM运行时数据区模型 Java虚拟机在执 ...
- JVM笔记3-java内存区域之运行时常量池
1.运行时常量池属于线程共享区中的方法区. 2.运行时常量池用于编译期生成的各种自变量,符号引用,这部分内用将在类加载后接入方法区的运行时常量池中存放. 看如下代码所示,如图: public clas ...
- 对JVM运行时常量池的一些理解
1.JVM运行时常量池在内存的方法区中(在jdk8中,移除了方法区) 2.JVM运行时常量池中的内容主要是从各个类型的class文件的常量池中获取,对于字符串常量,可以调用intern方法人为添加,而 ...
- JVM详解之:运行时常量池
目录 简介 class文件中的常量池 运行时常量池 静态常量详解 String常量 数字常量 符号引用详解 String Pool字符串常量池 总结 简介 JVM在运行的时候会对class文件进行加载 ...
- 运行时常量池中的符号引用/String.intern() /ldc指令
运行时常量池,之前放在方法区(永久代)中,1.8之后被转移到元空间,放到了native memory中. 具体的数据结构是:(看对象的内存布局,句柄访问还是对象头中保存指向类的元数据的指针,这里以对象 ...
- JVM 常量池、运行时常量池、字符串常量池
常量池: 即class文件常量池,是class文件的一部分,用于保存编译时确定的数据. 保存的内容如下图: D:\java\test\out\production\test>javap -ver ...
随机推荐
- Selenium和Firefox兼容问题
运行时遇到错误: org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on p ...
- Vue2.0+Node.js+MongoDB全栈打造商城系统 免费下载
<ignore_js_op> 课程目录||--第01章 课程介绍| 01-01 课程-导学.mp4| 01-02 前端框架回顾.mp4| 01-03 vue概况以及核心思 ...
- Git -- 分支与合并 (命令行+可视化工具p4merge)
基本命令 把所有的变化都放在master分支并不是最好的做法. 建议的做法是把变化放在分支里面. 至少应该准备一个feature分支之类的, 把变化都隔离开来, 然后等到所有的功能都稳定之后再合并到m ...
- es6 Generator生成器函数
生成器函数使用function*声明. 在生成器函数内部,有一种类似return的语法:关键字yield.二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yi ...
- Mycat 分片规则详解--范围取模分片
实现方式:该算法先进行范围分片,计算出分片组,组内在取模 优点:综合了范围分片和取模分片的优点,分片组内使用取模可以保证组内的数据分布比较均匀,分片组之间采用范围分片可以兼顾范围分片的特点,事先规划好 ...
- servlet的执行过程
第一次访问servlet的过程: 服务器启动:在服务器启动的时候,加载项目,就扫描web.xml文件,获得应用有哪些servlet,url-pattern, 客户端通过URl访问服务器[向服务器发送一 ...
- hi-nginx-1.3.4编译安装
hi-nginx既是 web 服务器,也是 application 服务器.它开源在https://github.com/webcpp/hi-nginx 它是NGINX的超集,因此与编译NGINX稍有 ...
- 【Windows】 Windows系统小积累
因为用Windows大多都是处理些个人事务,有很多东西搜过用过就忘了,不记住也可惜了还是记录一下 比较好 ■ win键+一个键的快捷打开方式 win键+q是搜索的快捷键,win键+r是运行的快捷键.而 ...
- 【Python】 python对象的文件化 pickle
pickle 之前隐隐约约在哪里看到过pickle这个模块但一直没怎么用过.然后让我下定决心学习一下这个模块的原因竟然是[妹抖龙女(男)主在工作中用到了pickle哈哈哈].嗯嗯,不扯皮了.pickl ...
- Java ORM Hibernate 入门笔记
一.下载 官网地址:http://hibernate.org/ Hibernate下有ORM(关系型数据库).OGM(NoSQL数据库).Search(对象全文检索).Validator的工具. OR ...