有什么理由在 64 位机器上仍然使用 int 而不是 long 吗?

Is there any reason to still use int as opposed to long on a 64 bit machine?

一般来说,如果在 64 位架构上编程,是否有任何理由仍然使用 int 而不是 Java 中的 long

特别是我的情况:

我使用 int 变量映射到 Oracle DB table 类型 NUMBER 的键(从 1 开始的序列号,并为每个新条目递增)。

DB 类型 NUMBERint 更精确,因此在 Java 端建模的正确方法是 long.

出于效率原因,我坚持使用 int,因为我们可能永远不会在 table 中拥有如此多的条目,以至于需要 int 可以代表的条目。

另一方面,由于大多数现代机器无论如何都是 64 位的,因此使用 long 而不是 int 在 Java 方面的效率应该没有区别], 正确的?我想如果你将大量的键列表加载到内存中,这会在内存方面有所不同,但我们不做这种操作。

在 64 位处理器上,long 会因为对齐、寄存器等因素而带来边际性能提升(这是否真的明显是值得商榷的)。这带来了在堆栈和堆上使用更多 space 的缺点,这本身可能会对性能产生负面影响。实际上,这取决于您的程序,因为影响性能的因素太多了。

我建议使用 int,除非您特别需要 64 位数字。如果您确定自己正在为 x86_64 架构编程,那么我认为这并不重要,因为这些都经过优化以非常有效地处理 32 位程序。