Java 性能静态初始化
哪一种是访问静态元素的最佳方式?假设我有一个类,用于共享int的静态数组 选项AJava 性能静态初始化,java,static,Java,Static,哪一种是访问静态元素的最佳方式?假设我有一个类,用于共享int的静态数组 选项A final class A { static private int[] a; static { a = new int[1000]; for(int i = 0; i < a.length;i++) { a[i] = i*50; } } static int getA(int index) { int tmp = a[index]; return tm
final class A {
static private int[] a;
static {
a = new int[1000];
for(int i = 0; i < a.length;i++) {
a[i] = i*50;
}
}
static int getA(int index) {
int tmp = a[index];
return tmp;
}
}
就性能而言,哪一个是最好的。或者是完全一样的东西;
提前感谢类
A
和B
之间的明显区别在于,对于后者,每次调用getter时都会初始化int[]
数组。在没有进一步要求的情况下,这似乎是不必要的。因此,我投票赞成使用A
类实现。A
优于B
。在B
中,每次调用getB
函数时,都会创建一个新的int[]
,这将占用堆中的时间和内存空间。另外,可以多次执行getB
中的for循环。第一个示例的static
块中的计算将发生一次,而在第二个示例中,每次调用该方法都会发生一次。两者都很差。您是否考虑过retrurn index*50代码>?这只是一个简单的例子来保持简单。我只是想知道在性能方面。如果我使用非常规值,你的建议就行不通了。非常感谢。anyway@Litiec希望很明显,对于多个调用,每次执行某个操作都比执行一次并重用结果要慢。那你问的是什么表演?谢谢这是我想的,但我不确定。因此,如果我们需要在类之间共享任何类型的数组,A选项是最好的。谢谢。如果您给出的示例是其他内容的代理,并且您想为您的问题添加更多信息,那么我很乐意更新。我只是想确认一下,因为我不确定。谢谢你的回答。
final class B {
static private int[] b;
static int getB(int index) {
b = new int[1000];
for(int i = 0; i < b.length;i++) {
b[i] = i*50;
}
int tmp = b[index];
return tmp;
}
public static void main(String[] args) {
int numA = A.getA(50);
System.out.println(numA);
int numB = B.getB(50);
System.out.println(numB);
}