gpt4 book ai didi

java - 在 64 位 java 中使用 long 代替 int 会带来好处

转载 作者:行者123 更新时间:2023-12-01 05:05:59 25 4
gpt4 key购买 nike

在 64 位 VM 中,使用 long 而不是 int 在性能方面会更好,因为 java 中的 long 是 64 位,因此拉取和处理 64 位在 64 位系统中,位字可能比提取 32 位字更快。 (我预计会有很多拒绝,但我正在寻找详细的解释)。

编辑:我的意思是“在 64 位系统中提取和处理 64 位字可能比提取 32 位字更快”,因为我假设在 64 位系统中,提取 32 位字位数据需要您首先获取 64 位字,然后屏蔽前 32 位。

最佳答案

int 使用 long 可能会减慢你的速度。

您最关心的是 64 位 CPU 上的 int 是否需要额外的处理时间。这在现代流水线 CPU 上是不太可能发生的。我们可以用一个小程序轻松测试这一点。它所操作的数据应该足够小以适合 L1 缓存,因此我们正在测试这个特定问题。在我的机器(64 位 Intel Core2 Quad)上基本上没有区别。

在真实的应用程序中,大多数数据不能驻留在 CPU 缓存中。我们必须担心将数据从主内存加载到缓存,这相对非常慢并且通常是瓶颈。这种加载以“缓存行”为单位进行,即 64 字节或更多,因此加载单个 longint 将花费相同的时间。

但是,使用long会浪费宝贵的缓存空间,因此缓存未命中会增加,这是非常昂贵的。 Java的堆空间也受到压力,因此GC Activity 会增加。

我们可以通过读取具有相同数量元素的巨大 long[]int[] 数组来演示这一点。它们比缓存所能容纳的要大得多。长版本在我的机器上花费了 65% 的时间。测试受限于内存->缓存的吞吐量,long[]内存体积大100%。 (我无法理解为什么不花 100% 的时间;显然还有其他因素在起作用)

关于java - 在 64 位 java 中使用 long 代替 int 会带来好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12664267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com