关于性能(内存或cpu)



这个问题是关于java编码的,我的问题很简单,所以我将用一个小例子来解释它:)

我有一个装满参数的String数组,我必须多次检查它的长度,所以,最好将参数的数量(数组长度)保存在一个变量中,或者每次都调用长度?,我想存储一个变量会消耗更多的内存,而另一种方式会使用更多的cpu,只是想问一下你认为什么更好,谢谢!

示例:

String[] arguments = {"a","b","c"};
int numberOfArguments = arguments.length;
if(numberOfArguments == 1)do whatever
if(numberOfArguments == 2)do whatever
if(numberOfArguments == 3)do whatever

etc

String[] arguments = {"a","b","c"};
if(arguments.length == 1)do whatever
if(arguments.length == 2)do whatever
if(arguments.length == 3)do whatever

编辑:我知道差别会很小。。但我要求一个漫长的过程,想想大的,一百万个"arguments.length",所以在这种情况下,我认为最好牺牲极少量的内存来存储变量,这对cpu来说应该比检查一百万次arguments-length比检查一个始终相同的变量值更好,你怎么看?

这是一个过早的优化;做任何你觉得可读性更强/更容易管理的事情。就我个人而言,我更喜欢直接引用length字段,因为我认为将其存储在另一个变量中没有意义(除非数组的长度在程序上下文中的含义可能与简单的元素计数不同——在这种情况下,将它存储在一个命名合理的变量中可能是合适的)。在任何情况下,您都可以放心,两者之间不会有明显的性能差异。

顺便说一句,在某些情况下(假设您能够看到任何时间差),array.length甚至可能比将长度存储在局部变量中并使用它更快。甚至还有一个字节码操作数专门为此保留:bearraylength),更不用说在此过程中进行的优化了。

首先:你无法将存储与速度进行比较,这是不同的。你能做的就是确定你对每一个的重视程度。如果你需要100%的速度,你会选择速度选项,反之亦然。

通常情况下,您需要平等的考虑,这就引出了以下问题:这取决于你自己的喜好。你会经常去那里吗?也许把它存储在一个变量中很有趣。

亲眼看看你觉得什么更容易使用:无论哪种方式,你的例子都没有什么影响。检索列表的大小已经存储在一个变量中,因此没有循环。

两者的区别在于创建一个额外的变量与获取数组长度,区别将取决于您如何使用此代码。

如果您创建了这个类的数百万个实例,那么在第一种方法中,您将创建数百万个变量,现在您可以考虑在第一种方式中更多地使用内存。

读取数组的长度并不昂贵,所以简而言之,这实际上取决于您的项目中如何使用这些代码。

抛开一切不谈,因为长度被多次使用,创建一个变量是一个很好的做法。

干杯!!

面向对象编程省去了执行长if语句的麻烦。计算一次参数的数量,然后为该场景创建特定类的实例。然后,您可以在该实例上调用任何方法,它将以"做任何事情"的方式处理这种情况。

(原谅我生疏的Java…)

public interface Arguments{
   void foo();
}
public class OneArgument implements Arguments{

   public void foo(){
      // do whatever
   }
}
public class TwoArguments implements Arguments{

   public void foo(){
      // do whatever
   }
}
public class ThreeArguments implements Arguments{

   public void foo(){
      // do whatever
   }
} 

然后你可以有一个工厂的方法:

public static Arguments create(String[] args){
   if(args.length == 1) return new OneArgument();
   else if(args.length == 2) return new TwoArguments();
   else if(args.length == 3) return new ThreeArguments();
   else throw new Exception();
} 

从长远来看,经过深思熟虑的体系结构很可能会产生更好的性能。

最新更新