【问题标题】:Is there any reason to still use int as opposed to long on a 64 bit machine?有什么理由在 64 位机器上仍然使用 int 而不是 long 吗?
【发布时间】:2015-08-25 22:42:25
【问题描述】:

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

特别是在我的情况下:

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

DB 类型NUMBERint 具有更高的精度,因此在Java 端对此建模的正确方法是long

出于效率原因,我坚持使用int,因为可能我们在表中永远不会有这么多条目,以至于需要int 可以表示的更多。

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

【问题讨论】:

  • 我不想浪费内存,如果它适合int
  • @UmaKanth 虽然有效,但您可能会遇到Gangnam-Style problem。如果内存不是问题并且您不能保证防止溢出,请使用long。虽然我不确定longs 是否针对 64 位 JVM 进行了优化(临时,我找不到任何确认/反驳支持的参考资料)。
  • 您如何确定您不会永远必须回到 32 位计算机?
  • @KevinWorkman 这是一个权衡。如果您回到 32 位机器,使用long,您的代码会运行得更慢。如果您使用int,您的代码运行“不安全”(当然,longs 也可能溢出,但这需要更长的时间)。
  • 在 64 位 CPU 上的 long 和 int 操作应该执行类似的操作。

标签: java 64-bit 32bit-64bit


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2013-12-05
    • 2021-10-15
    • 2010-10-01
    • 2011-03-05
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多