2

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

Python 最近(?)基本上合并int了 slong并且基本上只有一个数据类型long,对吧?如果您确定您的应用程序。那么只能在 64 位上运行,是否可以想象(可能是个好主意)在 Java 中使用 long 来处理所有内容?

4

2 回答 2

2

Pythonlong具有任意精度,它不是 64 位的。Python 3 改为longint所以现在只有一种整数类型的任意精度,这为程序员节省了大量工作。Java 的 int 是 32 位的,它的 long 是 64 位的。64 位处理器在 64 位整数上的性能通常优于 32 位处理器。

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

于 2010-05-16T22:27:09.420 回答
2

如果您确定您的应用程序。那么只能在 64 位上运行,是否可以想象(可能是个好主意)在 Java 中使用 long 来处理所有内容?

坏主意,海事组织

即使在 64 位 JVM 上使用int和使用之间存在差异(我认为这是非常值得怀疑的),它在整个应用程序中也不够显着,包括您依赖的库来保证使用一切。 longlong

还有一些潜在的问题:

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

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

于 2010-05-16T22:52:20.230 回答