gpt4 book ai didi

java - 在 Java 中比较 String 和 null 所花费的时间偶尔会出现峰值

转载 作者:行者123 更新时间:2023-11-28 21:30:08 25 4
gpt4 key购买 nike

我想知道我是否通过在函数开头删除对 (Object == null) 的检查来节省时间。我运行了以下四个测试:

    String test = null;
String test2 = "Hello";
String test3 = "ASMDAKLSMDKLÖASDJAKLHRFÖKLASJDKLASMDKLASJDMASKLDMASKLÖDMASKLDMASKLÖMDKLÖASMDKASMDKL";
int u, v;
u = 1;
v = 1;
long max = 999999999l;
long time;

time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test == null) u = v;
}
System.out.println("Test 1: " + (System.currentTimeMillis() - time) + " ms.");

time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test2 == null) u = v;
}
System.out.println("Test 2: " + (System.currentTimeMillis() - time) + " ms.");

time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test3 == null) u = v;
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");

time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");

事实证明,大多数时候,差异在误差范围内。大多数情况下,所有四个功能都需要大约 385 毫秒才能完成,并且都在 2 毫秒以内,即使是没有比较的那个。

然而,时不时地,也许每四次运行,一个函数比其他函数花费的时间更长。这始终是测试 2,时间始终在 570 毫秒左右。

有什么想法吗?我知道我在使用计算机时可能会出现性能下降,但它总是在同一个测试中,并且在这种情况下产生的时间在 575 毫秒以内。

写这篇文章的时候打我,那个时间正好是原来的 1.5 倍。但是为什么?

最佳答案

我认为这是对循环中的访问变量进行一些运行时优化的结果。我在我的机器上运行了以下代码,结果总是一样。

    String test = null;
String test2 = "Hello";
String test3 = "ASMDAKLSMDKLÖASDJAKLHRFÖKLASJDKLASMDKLASJDMASKLDMASKLÖDMASKLDMASKLÖMDKLÖASMDKASMDKL";

{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test == null) u = v;
}
System.out.println("Test 1: " + (System.currentTimeMillis() - time) + " ms.");
}

{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test2 == null) u = v;
}
System.out.println("Test 2: " + (System.currentTimeMillis() - time) + " ms.");
}

{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
if(test3 == null) u = v;
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");
}

{
int u = 1;
int v = 1;
long max = 999999999l;
long time;
time = System.currentTimeMillis();
for(int i = 0; i < max; i++) {
}
System.out.println("Test 3: " + (System.currentTimeMillis() - time) + " ms.");
}

关于java - 在 Java 中比较 String 和 null 所花费的时间偶尔会出现峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25625401/

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