64位JVM中的int数据类型。它是否比长期更“低效”?

时间:2010-05-16 22:18:35

标签: java int 32bit-64bit long-integer types

我听说在32位系统上使用short s比使用int更低效。这对于64位系统上的int是否相同?

Python最近(?)基本上将intlong合并,基本上只有一个数据类型long,对吗?如果你确定你的应用程序。那么只能在64位运行,甚至可以想象(可能是一个好主意)在Java中使用多长时间?

2 个答案:

答案 0 :(得分:2)

Python long具有任意精度,它不是64位。 Python 3将long更改为int,因此现在只有一种完整类型的任意精度,这为程序员节省了大量工作。 Java的int是32位,它的长度是64位。在64位整数上,64位处理器通常比32位处理器性能更好。

在64位平台上使用32位整数并不昂贵,至少在x64中是这样。仅出于性能原因,在Java中选择32位超过64位int或反之亦然是没有意义的。如果您使用两个32位整数而不是一个64位整数,那么无论如何它都会更慢。类似地,如果你使用64位,你可以使用32位,在某些平台上会慢一些。换句话说,为您的问题域使用正确的数据类型。

答案 1 :(得分:2)

  

如果您确定自己的应用。那么只能在64位运行,甚至可以想象(可能是一个好主意)在Java中使用多长时间?

不好主意,IMO

即使在64位JVM(我认为高度怀疑)上使用intlong之间存在差异,它也不会很重要足够覆盖整个应用程序,包括您依赖的库,以保证使用long进行所有操作。

还有一些潜在的问题:

  • 您将使用更多内存,至少long[]int[]
  • 如果您对永远不需要在32位平台上运行的假设证明是错误的,那么您会后悔的。

(我认为不会有显着的性能差异的原因是,如果有的话,问题将是获取和存储非对齐的int-32。但如果是这样,那么JVM设计者很可能确保int-32字段始终在64位字地址上对齐.JVM通常在32位体系结构上使用int-8和int-16执行此操作...)