더 빠른 Foo.b 또는 Foo.c 중 어느 것입니까?캐싱 된 게터 성능
public class Foo{
int a = 0;
public int b(){
if(a == 0){
return a = 1;
}
return a;
}
public int c(){
if(a == 0){
a = 1;
}
return a;
}
}
분해 된 바이트 코드 :
public int b();
Code:
0: aload_0
1: getfield #2 // Field a:I
4: ifne 14
7: aload_0
8: iconst_1
9: dup_x1
10: putfield #2 // Field a:I
13: ireturn
14: aload_0
15: getfield #2 // Field a:I
18: ireturn
public int c();
Code:
0: aload_0
1: getfield #2 // Field a:I
4: ifne 12
7: aload_0
8: iconst_1
9: putfield #2 // Field a:I
12: aload_0
13: getfield #2 // Field a:I
16: ireturn
}
이 foo.c를()가 추가 getfield을 가지고 보이지만 Foo.b()도 추가 운영하고있다. 바이트 코드 수준
어쩌면 당신이 일년 내내 그것을 실행하면 차이점을 발견 할 것입니다; D –
가장 읽기 쉬운 것은 확실히 두 번째 것입니다. 그래서 그걸 사용해야합니다. –
JIT가 수행 한 작업이 모두 수행 된 후에는 아무런 차이가 없을 것입니다. – Andreas