在64位VM中,考虑到long在Java中是64位,因此使用 long 而不是 int
在性能方面会做得更好,因此在64位系统中提取和处理64位字可能比提取32位字更快。(我期望有很多NO,但我正在寻找详细的解释)。
编辑
:我是说“在64位系统中,拉和处理64位字可能比拉32位字要快”,因为我假设在64位系统中,拉32位数据将需要您首先获得64位。位字,然后屏蔽前32位。
一般而言,使用long
for int
可能会使您减速。
您直接关心的是int
在64位CPU上是否需要额外的处理时间。在现代流水线CPU上,这种情况极不可能发生。我们可以使用一个小程序轻松地对此进行测试。它所处理的数据应足够小以适合L1缓存,以便我们测试此特定问题。在我的机器(64位Intel
Core2 Quad)上,基本上没有区别。
在实际应用中,大多数数据不能驻留在CPU缓存中。我们必须担心将数据从主内存加载到缓存中,这是一个非常缓慢的过程,通常是一个瓶颈。这样的加载以“缓存行”为单位,该行为64字节或更多,因此加载单个long
或int
将花费相同的时间。
但是,使用long
将浪费宝贵的缓存空间,因此缓存未命中将增加,这非常昂贵。Java的堆空间也很紧,因此GC活动将增加。
我们可以通过阅读大量证明这一点long[]
和int[]
阵列与相同数量的元素。它们比缓存所能容纳的更大。较长的版本在我的计算机上花费的时间增加了65%。该测试受memory->
cache的吞吐量限制,并且long []内存量大100%。(为什么不花100%的时间超出我;显然其他因素也在起作用)
问题内容: 在10年甚至5年内,将没有[ Edit2: 服务器或台式机] 32位CPU。 那么,使用(32bit)而不是(64bit)有什么优势吗? 并且使用有任何不利之处吗? 编辑: 通过我的意思是在绝大多数地方,这些LANGS使用 我的意思 是默认 使用哪种类型。这几天,我什至不必考虑是否应该将其用作周期计数器。用同样的方法专柜已经赢 寄存器已经是64位,32位类型已经没有增益。我认为8位类型
问题内容: 在Java中,是否保证int始终为32位,而长为64位,而不管体系结构是32位还是64位? 问题答案: Java是平台无关的。所以是32位,并且是64位的。
问题内容: 在64位计算机上,Java中的int大小是32位还是64位? 问题答案: 32位。这是Java语言的功能之一,整数的大小不会随基础计算机而变化。请参阅规范的相关部分。
问题内容: 我一直在这里找到问题,并且Google的人们遇到了麻烦,而不是遇到了其他麻烦。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个到。 我发现的唯一其他答案是“首先将其设置为Long”,这实际上并没有解决这个问题。 我最初尝试投射,但得到了“ ” 如您所料,我有点困惑,我被困住了,因为有些内容以形式出现,而我要存储其信息的实体要求序列号为Long。 问题答案: 请注意,强制转换为和强制
问题内容: 为什么不: 代替: 获得唯一哈希码的更高机会? 问题答案: 因为数组的最大长度为。 由于的主要用途是确定将对象插入/ 的后备数组中的哪个插槽,因此hashcode> 将无法存储在该数组中。