【发布时间】:2018-08-18 14:31:20
【问题描述】:
有人可以指导我正确的道路
为什么在下面的代码中,开始和结束msg之间有一秒的间隔?
System.out.println("Start:" + LocalTime.now());
for (int i = 0; i > -1; i++) { /*Infinite loop*/ }
System.out.println("End :" + LocalTime.now());
我试图找出 DCE 是否需要时间来处理这种类型的代码,但找不到太多。
【问题讨论】:
-
那个循环不是无限的。它将循环直到
i溢出并最终变为-1。 -
你在问什么?溢出
int需要一秒钟——这 24 亿次迭代需要时间。换句话说,你的循环不是无限的——它只是很长。 -
死代码消除从何而来?
-
另请注意,您的测量有点损坏,因为它测量的是打印第一个文本需要多长时间。打印需要很长时间,可能比您测量的其余代码更长。那样的话,它可能会主导测量,而由此产生的时间会给你留下错误的印象。因此,在您的测量中包括打印。此外,
LocalTime.now()不适合测量持续时间,因为它漂移。使用System.nanoTime()并获取差异。 -
@marstran 它不会变为 -1,而是在 -2147483648 处打破循环......在达到 -1 之前......我认为你的意思是小于 -1
标签: java