자바(java) 메모리구조


Static area

가장 바탕이 되는 메모리 구조

식당으로 치면 조리하는 곳 테이블 같은 기본적인 것들

자바 3가지 파일 중 field, constructor, method 중 field 부분에서 선언된 변수인 전역변수Static가 붙은 정적 멤버 변수를 Static 영역에 저장한다

(field에서 선언된 변수인 전역변수를 인스턴스( 변수라고 부른다)

Static가 영역에 있는 데이터는 프로그램 시작과 종료가 될 때까지 메모리에 남게 된다 (어디서든 사용가능하다)

너무 많이 사용하면 메모리를 너무 많이 잡아 먹는다 - 고로, 적당히 써라

Stack area

쉽게 말해, 새로 만들어지는 변수라고 생각하면 된다

메소드가 호출될 때 메모리가 할당되고 메소드 종료시 메모리 해제된다

public static void method() {
 int a = 5; a = 3;
}

method에서의 메소드가 호출 될 때 Stack에 int a 라는 메모리가 할당되고 method 종료됨

int a 값에 연속으로 넣으면 나중에 값이 덮어쓰기 됨

public static void main(String[] args) {

	for(int i=0; i<5; i++){}
	//		System.out.println(i); 컴파일 에러

}

위와 같이 for문 안에 i를 정의하고 for문 안에서 출력하지 않고 나와서 하면 i라는 지역변수는 사라지기 때문에 i 출력 불가

Heap area

실제 데이터가 저장된 공간 - Heap 공간

실제 데이터를 Stack 영역에서 객체를 만들어 불러옴

힙 영역에는 참조 타입인 객체와 배열이 생성되는 영역

JVM은 쓰레기 수집기를 실행시켜 참조하는 변수나 필드가 없다면 자동으로 제거한다

태그:

카테고리:

업데이트:

댓글남기기