java短、整数、长性能
我读到JVM在内部存储短、整数和长4个字节。我是从2000年的一篇文章中读到的,所以我不知道它现在有多真实
对于较新的JVM,使用short-over-integer/long是否会提高性能?自2000年以来,这部分实施是否发生了变化
谢谢
你可以在下面搜索框中键入要查询的问题!
我读到JVM在内部存储短、整数和长4个字节。我是从2000年的一篇文章中读到的,所以我不知道它现在有多真实
对于较新的JVM,使用short-over-integer/long是否会提高性能?自2000年以来,这部分实施是否发生了变化
谢谢
# 1 楼答案
使用你需要的,我认为短裤很少使用,因为范围小,而且是大端格式
任何性能增益都是最小的,但正如我所说的,如果应用程序需要的范围大于使用int的short go的范围,那么long类型对您来说可能太大了;但这一切都取决于你的应用程序
如果您对空间(内存)有顾虑,则应仅使用short,否则使用int(在大多数情况下)。如果您正在创建数组等,请通过声明int和short类型的数组来尝试。Short将使用1/2的空间,而不是int。但是如果您基于速度/性能运行测试,您将看到几乎没有差异(如果您处理的是数组),此外,您唯一节省的是空间
也就是说注释者提到了long,因为long是64位的。您将无法在4字节内存储long的大小(请注意long的范围)
# 2 楼答案
基本上没有区别。我们必须稍微“混淆”JITC,这样它就不会识别递增/递减操作是自消去的,并且不会使用结果。这样做,三个案例的结果大致相同。(实际上,
short
似乎要快一点。)结果:
# 3 楼答案
我同意user2391480,用空头计算似乎要贵得多。下面是一个例子,在我的机器上(Java7 64位、Intel i7-3770、Windows 7),短操作的速度大约是整数和长操作的50倍
}
输出:
注意:将“1”指定为短(为了避免每次施放,正如用户Robotnik建议的延迟源)似乎没有帮助,例如
编辑:根据用户在注释中热点击的请求进行修改,以便在主方法之外多次调用calculate()方法
# 4 楼答案
这是一个实现细节,但出于性能原因,大多数JVM都会对每个变量使用一个完整的字(或更多),因为CPU以字为单位访问内存。如果JVM将变量存储在子字单元和位置中,那么实际上速度会变慢
这意味着32位JVM将使用4个字节(甚至是布尔值),而64位JVM将使用8个字节。但是,对于数组元素,情况并非如此
# 5 楼答案
短类型的计算非常昂贵
以以下无用循环为例:
如果它是一个短字符,它将比int或long长1000倍
在Linux上的64位JVM版本6/7上检查
# 6 楼答案
整数类型存储在许多字节中,具体取决于具体类型:
见spec here
至于性能,这取决于你用它们做什么。 例如,如果要将文字值分配给字节或短字符,它们将被放大为int,因为文字值在默认情况下被视为int
这就是为什么你不能这样做:
因此,如果您计划使用字节或短字符执行一些循环,您将不会获得任何好处
另一方面,如果您使用字节数组或短数组来存储一些数据,您将明显受益于它们减小的大小
因此,我的答案是:视情况而定:)