键盘手C 2016-04-21 03:21 采纳率: 60%
浏览 2457

java中的64位数据和32位数据的区别

之前在看数据之间的相互比较的时候,遇到这样一个问题
“数值间的相等比较,本质是比较他们二进制存储是否相等。例如:0.3f==0.3返回的是false(32位的2进制的0.3表示和64位的0.3表示是不同的);但是0.5f==0.5返回的是true(因为32位和64位的二进制表示是相同的)”

那么我怎么知道要比较的这两个数在32位和64位中是否相等呢,有什么办法吗》
本人初学java,还望给各位多多指点

  • 写回答

1条回答 默认 最新

  • 程序猿的人生 2016-04-21 03:32
    关注

    所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据。如果我们将总长128位的指令分别按照16位、32位、64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位、32位的更快。而且除了运算能力之外,与32位处理器相比,64位处理器的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,而64位处理器的一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。传统32位处理器的寻址空间最大为4GB,使得很多需要大容量内存的数据处理程序在这时都会显得捉襟见肘,形成了运行效率的瓶颈。而64位的处理器在理论上则可以达到1800万个TB,1TB等于1024GB,1GB等于1024MB,所以64位的处理器能够彻底解决32位计算系统所遇到的瓶颈现象,速度快人一等,对于那些要求多处理器可扩展性、更大的可寻址内存、视频/音频/三维处理或较高计算准确性的应用程序而言,AMD 64处理器可提供卓越的性能。

    理论上来说32位的JVM有4G的堆大小限制。但是因为各种条件限制比如交换区,内核地址空间使用,内存碎片,虚拟管理机的管理开销,实际上可用的堆的大小远远比理论上的4G要少。
    在32位windows的机器上,堆最大可以达到1.4G至1.6G。
    在32位solaris的机器上,堆最大可以达到2G
    而在64位的操作系统上,32位的JVM,堆大小可以达到4G

    补充一句,在使用java参数-xms -xmx定义堆大小的时候,
    1. 如果是32bit的jvm超过4G肯定是没用的,定义了4G,最终使用到的可能只有2G
    2. 这两个值最好定义成一样,可以减少java gc的操作,有小幅度性能提高
    http://zhidao.baidu.com/link?url=SwbNk5UI7n_W4WMkfDgAoW9uo0eFpXQT5BW-6Gdkixd8q0oEQsqmrGdpeGU6EyG4H6VDTNXu15quMEOqlzDqO2-6igl5BeHv2YQr972pNX3

    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突