在 Java 中循环初始化新数组作为函数参数。表现
Initializing new array as function argument, in a loop, in Java. Performance
是否为以下代码的每个循环运行分配了一个新的浮点数组?
for (Element e : elements) e.colorize( new float[] { 0.5f, 0.5f, 0.5f, 0.5f } );
将其更改为以下内容是否会提高性能?
float[] color = new float[] { 0.5f, 0.5f, 0.5f, 0.5f };
for (Element e : elements) e.colorize(color);
性能会有所提升,主要是因为不再有任何内存分配开销,并且您可以节省大量 space。但更重要的部分是,您在第二个代码示例中为 same 数组着色,而在第一个代码示例中,您每次都为不同的数组着色。如果这是你想要的,太好了!如果不是,那么您需要重新考虑您的代码。
是的,你是对的。第二个会更有效率,因为数组只会被创建和初始化一次。
请注意,您所有的着色调用都将共享 float[]
数组,因此更改其中一个的内容将会更改所有这些调用。在这种情况下,这不太可能成为问题,但需要注意。
是否为以下代码的每个循环运行分配了一个新的浮点数组?
for (Element e : elements) e.colorize( new float[] { 0.5f, 0.5f, 0.5f, 0.5f } );
将其更改为以下内容是否会提高性能?
float[] color = new float[] { 0.5f, 0.5f, 0.5f, 0.5f };
for (Element e : elements) e.colorize(color);
性能会有所提升,主要是因为不再有任何内存分配开销,并且您可以节省大量 space。但更重要的部分是,您在第二个代码示例中为 same 数组着色,而在第一个代码示例中,您每次都为不同的数组着色。如果这是你想要的,太好了!如果不是,那么您需要重新考虑您的代码。
是的,你是对的。第二个会更有效率,因为数组只会被创建和初始化一次。
请注意,您所有的着色调用都将共享 float[]
数组,因此更改其中一个的内容将会更改所有这些调用。在这种情况下,这不太可能成为问题,但需要注意。