2013-04-11 2 views
2

이것은 중복 질문 일 수 있지만 내가 검색하는 것을 찾을 수 없습니다. 그것이 존재한다면, 중복에 대해 유감스럽게 생각합니다.메모리 할당 측면에서 자바 효율성 비교

코드의 다음 부분이 메모리 할당 측면에서 동일하면 배우고 싶습니다. 자바는 첫 번째 코드에서 변수 aN^2 배jn 회 할당 또는 두 번째 코드로 한번만 할당하는 경우

//first 
int n = some_number; 
for(int i = 0; i < n; i++){ 
    for(int j = 0; j < n; j++){ 
     int a = something; 
    } 
} 

//second 
int i, j, a; 
for(i = 0; i < n; i++){ 
    for(j = 0; j < n; j++){ 
     a = something; 
    } 
} 

는 I 궁금해.

자바에서이 두 번 시도했지만 결과는 첫 번째 시도가 8 초, 두 번째가 9 초, 다른 시도가 반대 인 것과 일치하지 않습니다. 그래서, 나는 차이가 바이트 코드를 검사하는 것입니다가 있는지

감사

,

답변

7

쉬운 방법 중 하나를 반드시가 같거나하지 않으면 만들고 싶어. 당신이 자세히를 비교하면, 당신은 그들이 본질적으로 동일한 것을 볼 수 있습니다

public static void g(); 
    Code: 
     0: bipush  100 
     2: istore_3  
     3: iconst_0  
     4: istore_0  
     5: goto   26 
     8: iconst_0  
     9: istore_1  
     10: goto   18 
     13: iconst_3  
     14: istore_2  
     15: iinc   1, 1 
     18: iload_1  
     19: iload_3  
     20: if_icmplt  13 
     23: iinc   0, 1 
     26: iload_0  
     27: iload_3  
     28: if_icmplt  8 
     31: return   

: 두 번째로 컴파일 반면

public static void f(); 
    Code: 
     0: bipush  100 
     2: istore_0  
     3: iconst_0  
     4: istore_1  
     5: goto   26 
     8: iconst_0  
     9: istore_2  
     10: goto   18 
     13: iconst_3  
     14: istore_3  
     15: iinc   2, 1 
     18: iload_2  
     19: iload_0  
     20: if_icmplt  13 
     23: iinc   1, 1 
     26: iload_1  
     27: iload_0  
     28: if_icmplt  8 
     31: return   

:

첫 번째 버전으로 컴파일합니다.

필자는 스타일을 사용하여 변수를 처음 사용할 때 가능한 한 가깝게 선언하는 것이 바람직하다고 생각합니다. 이를 염두에두고 두 번째 버전에서 첫 번째 버전을 선택합니다.

+0

설명해 주셔서 감사합니다. – smttsp

+0

좋은 조언. 나는 바이트 코드 해시를 얻는 방법을 추가 할 것이다 :'javap -c package.Class' –