`

cpu字长、操作系统字长和jvm中各数据类型占用的字节数关系

阅读更多

        cpu字长是指cpu同时参与运算的二进制位数,现在主流的pc的机器字长都是64位的。机器字长直接决定着机器可寻址的虚拟空间地址大小。

 

The word size of a computer generally indicates the largest integer it can process in a single instruction, and the size of a memory address, which is usually, but not necessarily the same as the integer size.

         操作系统字长要看操作系统的位数,跟机器字长并不一定一致,比如64位机器可以安装32位操作系统。虽然64位cpu的可寻址理论达2^64 bytes,但是由于系统限制,32为系统只能访问最大2^32 bytes的虚拟地址空间。另外,64位os上可以安装32位软件,如64位windows。

         jvm的字长,我找了下jvm specification e7,并没有找到jvm定义字长,但是在《深入Java虚拟机》这本老经典里头,看到作者写到:

The basic unit of size for data values in the Java virtual machine is the word--a fixed size chosen by the designer of each Java virtual machine implementation. The word size must be large enough to hold a value of type byte, short, int, char, float, returnAddress, or reference. Two words must be large enough to hold a value of type long or double. An implementation designer must therefore choose a word size that is at least 32 bits, but otherwise can pick whatever word size will yield the most efficient implementation. The word size is often chosen to be the size of a native pointer on the host platform.

The specification of many of the Java virtual machine's runtime data areas are based upon this abstract concept of a word. For example, two sections of a Java stack frame--the local variables and operand stack-- are defined in terms of words. These areas can contain values of any of the virtual machine's data types. When placed into the local variables or operand stack, a value occupies either one or two words.

As they run, Java programs cannot determine the word size of their host virtual machine implementation. The word size does not affect the behavior of a program. It is only an internal attribute of a virtual machine implementation.

        也就是说,jvm基本的数据单位是字,这个字的字长,spec中是没有规定的,但是必须足够持有byte、short、int、char、float、returnAddress和reference,而两个字的字长足以持有long和double。spec里边规定这些类型最大32位,如int的(2.3 Primitive Types and Values):

int, whose values are 32-bit signed two's-complement integers, and whose default value is zero

        一般字长选择都根据底层主机平台的指针长度来选择,而指针长度是由cpu运行模式的寻址位数决定的,所以64位的机器上,运行64位OS,安装64位jvm的话,对象地址可能是64bit的,当然这根实际使用内存大小jvm参数设置相关

        而这里提到,基于零基压缩,分配给jvm的内存必须控制在4g到32g之间,因为对象头是最小8个字节,普通寻址是地址指向字节,如果我们知道jvm里对象大小都是8字节对齐,那么一个地址可以指向8字节的首地址,也就是寻址能力扩大八倍,当然这里是指hotspot vm。而为啥最小4g呢?因为小于4g就不需要压缩了。

分享到:
评论

相关推荐

    Java 字节码概述

    * 执行环境:用于保存上次调用的方法、局部变量指针和操作数栈的栈顶和栈底指针。 * 操作数栈:用于存储运算所需操作数及运算的结果。 栈操作实例 常量池是类中所有常量的一个有序集合,包括: * 直接常量...

    java和c/c++ 数据类型长度的比较

    需要注意的是,`sizeof()`运算符可以用来获取数据类型占用的字节数,但这可能会受到编译器和平台的影响。 C++在数据类型长度方面与C基本一致,但有一些额外的特性。例如,C++中的char类型始终是8位,保证了一致性。...

    2021-2022计算机二级等级考试试题及答案No.11886.docx

    17. 占用存储字节最多的数据类型:浮点数(如`0.0`)通常比整数和字符型数据占用更多存储空间。 18. Word打印预览:在Word中,打印预览功能可以帮助用户在实际打印前查看文档的打印效果,减少不必要的浪费。 19. ...

    2021-2022计算机二级等级考试试题及答案No.9776.docx

    例如,在C++中,整数(int)通常占用4字节,字符(char)占用1字节,而浮点数(float)占用4字节,双精度浮点数(double)占用8字节。 ### 4. 控件属性与用户交互 - **属性解析**:在本题中,正确答案是D选项,“将控件的...

    杭州电子科技大学计算机考研复试资料合集,适用于复试为408+软件工程+数据库+计算机程序语言基础的考生

    本文是针对杭州电子科技大学计算机考研复试的一...至于计算机程序语言基础,不仅要求掌握至少一种编程语言,还需要理解数据类型、控制结构、函数和异常处理等概念。通过深入学习这些内容,考生可以为复试做好充分准备。

    2021-2022计算机二级等级考试试题及答案No.246.docx

    24. **Java基本数据类型**:Java中的char类型采用Unicode编码,每个Unicode码占用2字节。 25. **Java文件对话框**:使用JFileChooser类获取的信息首先是文件路径或文件对象。 26. **Word2003菜单功能**:在Word...

    MiniJavaVM—个Java虚拟机的设计和实现

    JavaVM 工程负责实现 Java 虚拟机的数据类型和字长考量,包括整数型、浮点型、字符型等数据类型。 JavaNativeCall 工程 JavaNativeCall 工程负责实现 Java 虚拟机和 native 代码的交互,包括 native 方法的调用和...

    计算机组成原理面试常见问题整理

    + 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。 + 指令在存储器内按顺序存放。 + 早期的冯诺依曼机以运算器为中心,输入/输出设备通过运算器与存储器传送数据...

    计算机组成原理考试复习题

    - 当两个正数相加的结果超出了数据类型的表示范围时,就会发生溢出现象。 21. **在定点数运算中产生溢出的原因是:运算的结果的操作数超过了机器的表示范围。** - 定点数运算中,如果结果超过了机器能够表示的...

    深入java虚拟机笔记

    - **字长的考量**:不同平台下JVM如何处理数据类型的字长问题。 - **类装载器子系统**:深入探讨类装载器的工作原理及其层次结构。 - **方法区**:方法区用于存储每个类的信息,包括静态变量、常量池等内容。 - ...

    一个Java虚拟机的设计和实现

    - **Java虚拟机的数据类型和字长考量**:定义了MiniJavaVM中使用的各种数据类型及其位宽。 - **JavaVM类**:提供了核心类的实现,如类加载器、执行引擎等。 ##### 3.3 JavaNativeCall工程 JavaNativeCall工程关注...

    2021-2022计算机二级等级考试试题及答案No.13408.docx

    其中,DB 是存储数据的地方,而 DBMS 则是用于管理和操作数据库的软件系统。 ### 24. Word 中多文档切换 错误的说法是“如果打开了两个以上的文档,可通过任务栏选择并切换到需要的文档”。实际上,在 Word 中切换...

    2021-2022计算机二级等级考试试题及答案No.17646.docx

    - **解释**:“32位微型计算机”中的32指的是机器的字长,即CPU每次能够处理的二进制位数。在本题中,“32”指的是计算机的字长。 - **应用场景**:字长是衡量计算机性能的一个重要指标,通常来说,字长越大的计算机...

    虚拟机学习笔记--周志明老师第三版

    * 对齐填充(Alignment Padding):内存对齐为 1 个字长整数倍,减少 CPU 总线周期。 3. 内存溢出 内存溢出(OutOfMemoryError)是指 JVM 无法分配对象所需内存时抛出的异常。解决方法包括: * 调整堆大小:...

    《深入Java虚拟机》整理

    - **数据类型**:包括原始类型(如int、long等)和引用类型(如Object)。 - **字长**:通常为32位或64位,取决于JVM的具体实现。 - **类装载子系统**:负责加载、链接和初始化类或接口。 - **方法区**:存储已...

    java练习题套装

    1. **Java 字节码与平台的关系**:Java虚拟机(JVM)使得Java程序独立于平台,它将字节码与各个操作系统和硬件分开,实现了一次编写,到处运行的目标。 2. **Java 语言的特点**:与C++相比,Java的最突出特点是跨...

    2021-2022计算机二级等级考试试题及答案No.19950.docx

    - **通用**:这不是Access表中的一个数据类型。 - **日期/时间**:用于存储日期和时间。 正确答案是**C**(通用)。 ### 15. 计算机硬件组成 题目指出了一台完整的计算机硬件是由哪些部分组成的。 **解析:** - ...

    计算机&软件工程&人工智能研究生复试资料整理

    - **计算机系统5层层次结构**:从下到上分别是机器语言层、操作系统层、汇编语言层、高级语言层和应用程序层。 7. **翻译、解释**:编程语言的两种执行方式。 8. **计算机体系结构与计算机组成**: - **计算机...

Global site tag (gtag.js) - Google Analytics