정적메모리, 동적메모리의 개념..
앨버트
class TopMemory
{
private int sum;
private int minus;
public int calcData(int a,int b) {
int c = a + b;
int d = a - b;
sum = c;
minus = d;
return sum;
}
public static void main(String[] args) {
TopMemory t = new TopMemory();
int s = t.calcData(1,2);
System.out.println(s=+s);
}
};
위 예제에서 a,b,c,d는 정적메모리
t나 sum,minus등은 동적메모리라 하더군요..
대략적인 감은 오지만 정확히는 모르겠습니다.
아시는 분은 설명좀 부탁해요~
-
노을
아핫 정정 하겠습니다. 역시 클래스가 로딩될때 이미 잡혀버린다는건 좀 아니군요..
클래스를 정적바인딩 할경우(해당 클래스가 컴파일타임에 존재해야함) 컴파일 타임때
심볼테이블에 메소드의 지역변수들이 잡혀버립니다. 즉 해당 클래스를 정적바인딩 하는 코드라면
컴파일타임시 이미 결정되어 집니다 그러므로 메소드의 지역변수는 정적입니다. -
라와
메소드가 호출될때 생성됐다가 사라지는게 맞지않나용^^
-
어둠
흠.. 지역변수들이 클래스가 로딩될때 잡힌다는것은 조금 틀리가도 보입니다.
예를 들면 메소드의 구현부에 있는 파라미터들은 해당 메소드에 진입할때
스택에 잡힌다고 알고 있기 때문입니다.
( 근데 -_- 맞는지. ㅋㅋ 갑자기 자신이 안생기는데요~ ㅎㅎ ) -
여우비
a,b,c,d는 지역변수입니다.
t는 참조변수이며 sum과 minus는 멤버변수입니다.
t라는 변수가 생기는 시점은 프로그램이 시작되고(메인메서드가 시작되고) 그 이후입니다.
즉 t라는 변수는 프로그램실행이후에 생성된다는 뜻이지요 더불어 t라는 참조변수에
new TopMemory()로 생성된 인스턴스의 참조값이 대입됩니다. 이 과정에서 sum과 minus가 탄생됩니다.
동적과 정적을 구분하기 가장 쉬운 방법은 런타임에 생성되는가 아닌가로 구분하시면 됩