있습니다. 어떤 객체는 프로그램이 살아 있는 동안 꿋꿋이 살아 남는가 하면
어떤 객체는 간단한 조건문이나 반복문을 마치면 삶이 끝나는 객체가 있습니다.
자바에서 객체나 변수의 삶의 길이는 기본적으로 블록 단위 { , }로 좌우됩니다.
예제 1 - 17은 블록단위에서 레퍼런스(혹은 변수) supply, d , z 를 읽고,쓸수 있는 영역을
보여주고 있습니다.
{
int supply = 120; // 바깥쪽 블록영역에서는 supply,d를 읽고,쓸수 있습니다.
Dragoon d = null;
if ( supply < 200) { // 안쪽 블록영역에서는 supply,d,z를 읽고,쓸수 있습니다.
Zealot z = new Zealot();
d = new Dragoon();
}
// 바깥쪽 블록영역에서는 supply,d를 읽고,쓸수 있습니다.
}
예제 1 - 17
Zealot형 레퍼런스 z는 안쪽의 { , } 블록 안에서 선언 되었기 때문에 그 블록 안에서만
존재할 수 있습니다. 그 블록을 벗어나게 되면 z는 영역을 벗어나게 되고 만들어진
질럿 객체를 더 이상 참조할 수 없게 됩니다.
Dragoon d는 바깥쪽의 {, }블록에서 선언 되었기 때문에 존재할 수 있는 영역은 안쪽 블록,
바깥쪽 블록 모두에서 참조할 수 있습니다.
Zealot z가 안쪽 블록을 벗어나는 순간 레퍼런스 z는 존재하지 않게 됩니다.
이 사건과 동시에 레퍼런스 z와 결합하고 있는 질럿 객체는 프로그램에서 더 이상 참조할
수 있는 방법이 없기 때문에 만들어진 질럿 객체는 프로그램에서 메모리만 낭비하고 있는
쓸데 없는 객체가 되버립니다. 자바에서는 이런 객체,즉 더 이상 레퍼런스가 존재하지 않는
객체를 모두 모아 없애버리고 메모리를 확보하는 자동 메커니즘이 있습니다.
이를 가비지 컬렉션(Garbage Collection) 이라고 합니다.
하지만 이런 가비지 컬렉션이 언제 일어나는 지에 대해선 프로그래머는 알 수가 없고,
자바 버추얼머신의 판단에 전적으로 좌우됩니다. 물론 알아서 잘 해줍니다.
'자바 Basic > 자바언어의핵심' 카테고리의 다른 글
자바공부-14.첫번째 자바프로그램 (0) | 2007.11.30 |
---|---|
자바공부-13.클래스 변수와 클래스 메소드 (static variable & static method) (0) | 2007.11.30 |
자바공부-11.생성자와 초기화 (0) | 2007.11.30 |
자바공부-10.인스턴스 변수의 초기화 (0) | 2007.11.30 |
자바공부-9.인스턴스 변수 (0) | 2007.11.30 |