Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于性能(内存或cpu)_Java_Performance - Fatal编程技术网

Java 关于性能(内存或cpu)

Java 关于性能(内存或cpu),java,performance,Java,Performance,这个问题是关于java编码的,我的问题很简单,所以我将用一个小例子来解释:) 我有一个充满参数的字符串数组,我必须多次检查它的长度,因此,最好将参数的数量(数组长度)保存在一个变量中,或者每次只调用长度?我认为存储一个变量将消耗更多内存,另一种方法将使用更多cpu,只是想问一下你觉得什么比较好谢谢 例如: String[] arguments = {"a","b","c"}; int numberOfArguments = arguments.length; if(numberOfArgumen

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

我有一个充满参数的字符串数组,我必须多次检查它的长度,因此,最好将参数的数量(数组长度)保存在一个变量中,或者每次只调用长度?我认为存储一个变量将消耗更多内存,另一种方法将使用更多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


编辑:我知道差别会很小。。但我要求的是一个漫长的过程,想想大的,一百万个“参数.长度”,所以在这种情况下,我认为最好牺牲一个极小的内存来存储变量,这对cpu来说应该比检查参数长度一百万次要好,而不是检查一个始终不变的变量值,你认为呢?

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


顺便说一下,
array.length
在某些情况下可能比将长度存储在局部变量中并使用它更快(假设您能够看到任何时间差)。甚至还有专门为此保留的字节码操作数:
be
arraylelength
),更不用说将要进行的优化了;做任何你觉得更可读/更容易管理的事情。就我个人而言,我更喜欢直接引用
length
字段,因为我认为将其存储在另一个变量中没有任何意义(除非数组的长度在程序上下文中的含义与元素计数不同——在这种情况下,将其存储在合理命名的变量中可能是合适的)。在任何情况下,您都可以放心,两者之间不会有明显的性能差异


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

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

通常情况下,您需要平等的考虑,这就导致我们: 这取决于你自己的喜好。你会经常去那家酒店吗?也许将其存储在变量中很有趣


看看你发现什么更容易使用:你的例子对任何一种方式都没有什么影响。检索列表的大小已经存储在变量中,因此没有循环发生。

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

通常情况下,您需要平等的考虑,这就导致我们: 这取决于你自己的喜好。你会经常去那家酒店吗?也许将其存储在变量中很有趣


看看你发现什么更容易使用:你的例子对任何一种方式都没有什么影响。检索列表的大小已经存储在变量中,因此不会出现循环。

面向对象编程可以避免执行长if语句。计算一次参数的数量,并为该场景创建特定类的实例。然后,您可以对该实例调用任何方法,它将以“做任何事情”的方式处理该情况

(原谅我生锈的爪哇…)

然后您可以使用工厂方法:

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();

} 

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

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

(原谅我生锈的爪哇…)

然后您可以使用工厂方法:

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();

} 

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

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

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

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

撇开一切不谈,因为长度被多次使用,所以创建一个变量是一个很好的实践


干杯

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

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

读取数组的长度并不昂贵,所以简言之,它实际上取决于如何使用此代码
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();

}