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