기타/프로그래밍 분류

Java - 12.Static과 메모리 구조

zelkova 2011. 6. 30. 08:28
 static : 정적인, 고정된, 정지의

Static필드는 왜 필요할가?
앞의 클래스와 멤벼변수들은 클래스가 인스턴스화 되면서 각 인스턴스의 고유값을 저장하기 위한 인스턴스 멤버변수로 존재한다는 것을 알 수 있다.

 프로그램을 구현하다보면 종종 같은 클래스에서 파생된 인스턴스 사이에 정보를 공유해야 하는 경우를 만난다. 그러나 각각의 메모리 공간을 할당받아 사용하는 인스턴스로 인스턴트들의 데이터를 공유한다는 것은 불가능하다. 이러한 문제를 해결해 주는 것이 static예약어 이다. 


 Java 메모리 관리 구조

Text Area : 기계어로된 프로그램의 로직이 위치하는 메모리 영역
Static Area : 전역적 성격의 static 형 필드가 생성되는 메모리 역역
Heap Area : new 연산자를 통해서 인스턴트 필드가 생성되는 메모리 영역
Stack Area : 함수의 실행시 생성되는 함수 변수(로컬 변수, 자동 변수)가 생성되는 메모리 영역

용어정리
satatic 필드 : 모슨 인스턴트에서 접근할 수 있도록 클래스 차원에서 정의된 필드라 하여 일명 '클래스 필드'라고도 한다.
non static 필드 : 각 인스턴트별로 할당된다고 하여 일명 '인스턴스 필드'라고도 한다.
로컬 변수 : 선언된 임의의 함수 안에서 생성되어 함수의 실행을 마치고 호출한 지점으로 제어를 옮길 때 메모리가 자동으로 해제된다고 하여 일명 '자동 변수'라고도 한다.

메모리 생명주기
▶Static 영역 
로딩되면서 생성되어 프로그램이 종료되면 JVM에 해당 메모리를 반환

▶Heap 영역
non static 필드 또는 인스턴스 변수는 new  예약어에 의해 생성된 인스턴스를 참조하는 JVM의 GC(Garbage Collection) 기능에 의해 해당 인스턴스에 해당되었던 메모리를 반환한다.

▶Statck 영역
자동 변수 또는 로컬변수, 함수, 등에는 해당 선언 라인이 실행될때 생성되어 해당 변수를 포함하고 있는 함수가 종료되면 메모리를 반환한다.

~생명주기를 짧은 순으로 정리하자면 ~
Stack,Heap,Static이다.

따라서 Static 변수를 남용하게 되면 프로그램은 돌아가지만 종료되기전까지 사용하지 않는 변수를 유지하며 메모리를 낭비하게 되므로 자알~ 써야 한다.


Static  메서드에서 non static의 필드나 메서드에 접근할 수 없는 이유
 static 메서드에서 non static 필드나 메서드에 접근할 수 없는 이유는 static 관련 자료가 non static 관련 자료보다 먼저생성되기때문이다.


반응형

'기타 > 프로그래밍 분류' 카테고리의 다른 글

Java - 14.패키지  (0) 2011.07.01
JAVA - 13.접근제어  (0) 2011.06.30
JAVA - 11.클래스와 인스턴스  (0) 2011.06.29
JAVA - 10.객체지향의 개념  (0) 2011.06.28
JAVA - 9.주석  (0) 2011.06.28