Java의 Activation Record
글쓴이: envia / 작성시간: 화, 2007/03/13 - 12:37오전
public static void test(int a) { for (int i = 0; i < a; ++i) System.out.println(i); for (int i = 0; i < a; ++i) System.out.println(i); // here }
자바에서 위와 같은 코드의 함수 마지막에서 (here
부분을 실행할 때) test의 activation record에 i를 위한 기억 공간이 몇 개가 있게 되나요? 각각 1개씩 해서 2개인지, 1개인지, 이미 정리해서 없는지 궁금합니다. i의 scope가 어떻게 되는지는 알 것 같은데, i의 메모리에서의 lifetime은 어떻게 될지 궁금하네요. (참고 자료가 있으신 분은 그것도 공유해 주시면 더 좋겠습니다.)
Forums:
java compiler에 달려 있습니다
javac와 같은 java compiler에 달려 있을 듯 합니다.
우선 for loop의 counter는 iinc instruction으로 컴파일 될 가능성이 큽니다.
여기서 compiler가 위의 i와 아래의 i를 다른 local variable slot에 할당할 수도 있고, 같은 slot에 할당할 수도 있습니다. 아마도 같은 slot에 할당하는 것이 일반적이라고 생각됩니다.
같은 slot이라면 i를 위한 기억 공간이 1개라고 할 수 있습니다. 이러한 local variable 공간은 method가 실행될 때 할당되고 method가 끝나면 사라집니다.
참고로, 아래는 위 소스를 javac로 컴파일하여 javap로 decompile한 것입니다. i를 위한 local slot은 1개가 쓰였음을 알 수 있습니다.
코더에서 프로그래머까지
코더에서 프로그래머까지
댓글 달기