【发布时间】:2020-07-02 08:22:14
【问题描述】:
使用强制转换将long 值分配给int 变量更快还是使用long 变量更快?
还是在消耗更多内存和更多处理之间做出选择?
这是一个示例测试:
import java.time.Duration;
import java.time.Instant;
public class NanoTest {
final int loop = 20000;
public void testNoCasting() {
long sum = 0;
long time = System.currentTimeMillis();
for (int i = 0; i < loop; i++) {
sum += System.currentTimeMillis() - time;
}
System.out.println(sum);
}
public void testIntCasting() {
int sum = 0;
long time = System.currentTimeMillis();
for (int i = 0; i < loop; i++) {
sum += (int) (System.currentTimeMillis() - time);
}
System.out.println(sum);
}
public static void main(String[] args) {
NanoTest nt = new NanoTest();
Instant start = Instant.now();
nt.testNoCasting(); // or nt.testIntCasting();
Instant end = Instant.now();
System.out.print("Duration: ");
System.out.println(Duration.between(start, end).getNano());
}
}
【问题讨论】:
-
你的测试揭示了什么?
-
确实有更好的方法来测试 JVM 的性能,你知道的...
-
你好 Vivin,另一个问题是关于对象转换的,我的疑问是关于原始类型。谢谢。
-
为什么不用System.nanoTime();哪个更准确?
-
我怀疑执行时间太小,无法用毫秒来衡量。我建议你尝试执行数千个转换操作,而不是一次一个。
标签: java performance primitive