有什么理由在 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 类型 NUMBER
比 int
更精确,因此在 Java 端建模的正确方法是 long
.
出于效率原因,我坚持使用 int
,因为我们可能永远不会在 table 中拥有如此多的条目,以至于需要 int
可以代表的条目。
另一方面,由于大多数现代机器无论如何都是 64 位的,因此使用 long
而不是 int
在 Java 方面的效率应该没有区别], 正确的?我想如果你将大量的键列表加载到内存中,这会在内存方面有所不同,但我们不做这种操作。
在 64 位处理器上,long
会因为对齐、寄存器等因素而带来边际性能提升(这是否真的明显是值得商榷的)。这带来了在堆栈和堆上使用更多 space 的缺点,这本身可能会对性能产生负面影响。实际上,这取决于您的程序,因为影响性能的因素太多了。
我建议使用 int
,除非您特别需要 64 位数字。如果您确定自己正在为 x86_64 架构编程,那么我认为这并不重要,因为这些都经过优化以非常有效地处理 32 位程序。
一般来说,如果在 64 位架构上编程,是否有任何理由仍然使用 int
而不是 Java 中的 long
?
特别是我的情况:
我使用 int
变量映射到 Oracle DB table 类型 NUMBER 的键(从 1 开始的序列号,并为每个新条目递增)。
DB 类型 NUMBER
比 int
更精确,因此在 Java 端建模的正确方法是 long
.
出于效率原因,我坚持使用 int
,因为我们可能永远不会在 table 中拥有如此多的条目,以至于需要 int
可以代表的条目。
另一方面,由于大多数现代机器无论如何都是 64 位的,因此使用 long
而不是 int
在 Java 方面的效率应该没有区别], 正确的?我想如果你将大量的键列表加载到内存中,这会在内存方面有所不同,但我们不做这种操作。
在 64 位处理器上,long
会因为对齐、寄存器等因素而带来边际性能提升(这是否真的明显是值得商榷的)。这带来了在堆栈和堆上使用更多 space 的缺点,这本身可能会对性能产生负面影响。实际上,这取决于您的程序,因为影响性能的因素太多了。
我建议使用 int
,除非您特别需要 64 位数字。如果您确定自己正在为 x86_64 架构编程,那么我认为这并不重要,因为这些都经过优化以非常有效地处理 32 位程序。