gpt4 book ai didi

java - 值的大小影响计算时间?

转载 作者:行者123 更新时间:2023-11-29 08:10:34 26 4
gpt4 key购买 nike

假设我有这样一个 Java 程序:

//case1
Long first = 1;
Long second = 1;
Long third = first - second;

//case2
Long first = Long.MAX_VALUE;
Long second = 100000L;
Long third = first - second;

这两种情况应该具有完全相同的执行时间和开销,不是吗?实际操作是对Long右边的每一位进行的,不管里面包含的值是多少,对吧?

如果我的假设是正确的,是否有任何语言不是这种情况?

编辑:提示这个的案例是我们在工作中使用的 16 位 PIC(C 代码),它计算可变时间量的平均值。在从 M S 和 Thom 那里得到以下答案后,我现在明白有可能以这种方式引入错误,因为 PIC 正在计算任务关键信息,时间敏感。

非常感谢大家

最佳答案

您所说的在 Java 中是正确的 — 操作的执行时间与值无关。在某些语言(例如 Lisp)中,如果值超过数据类型的最大合法值,执行会自动切换到使用“大整数”包,这会大大减慢执行速度。

编辑第一种和第二种情况略有不同:值 1 是特殊的(0 也是)。字节码为

Long first=1L;

是:

lconst_1
invokestatic #2; //Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore_1

而如果常量是(比方说)2L,则得到这个字节码:

ldc2_w  #3; //long 2l
invokestatic #2; //Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore_2

由于 lconst_1ldc2_w 运行得更快,因此情况 1 和情况 2 之间存在轻微的时间差异。

关于java - 值的大小影响计算时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com