자바 메모리 영역의 사용 :: 소림사의 홍반장!

자바 메모리 영역의 사용

2012. 7. 26. 11:31 - 삘쏘굿

Season season1 = new Season();

Season season2 = new Season();

Season season3 = new Season();

  

 

 

Static 영역

설계도에 해당하는 클래스가 컴파일되어 올라간다.

 

Stack 영역

생성된 객체를 참조하는 레퍼런스가 올라간다.

기본적으로 하나의 선입후출(FILO) 스택 구조를 가지는 영역이 준비된다.

기본 타입에 대한 연산과 메서드 블록 변수가 계산된다.

 

Heap 영역

필요한 객체를 생성하여 사용하려면 객체를 위한 Heap 영역이 필요하다.

또한, Heap의 한 부분으로 존재하는 리터럴 풀(literal pool)이라는 영역은

예를 들면,

String str = "가나다";

처럼 new 키워드를 사용하지 않는 문자열을 저장한다.

 

* 포인터는 객체의 주소를 직접 가리키므로 메모리 주소를 이용해 찾고 변경할 수 있다.

그러나 자바에서는 사용자가 메모리 주소를 설정하거나 조작할 수 없다.

일단 객체가 생성되면 1차 주소(해쉬코드)가 자동으로 할당되고,

레퍼런스는 2차 주소를 갖게 된다.

1차 주소와 2차 주소는 JVM이 맴핑시켜므로 사용자가 메모리 주소를 찾을 수 없지만,

JVM이 메모리도 자동으로 관리해 주기 때문에 사용자 입장에서는 편리하다.

 

 

 

 Static

 Stack

 Heap

사용 

용도

- Static으로 선언.

- 클래스가 올라간다.

- 컴파일된 메서드가 올라간다.

- shared라고도 불린다.

- 클래스.* 으로 사용가능

  (ex : Season.aaa 로 사용가능)

- 선입후출(FILO)구조

- 객체 레퍼런스

- push, pop

- 메서드 변수

- 메서드 파라미터

- 메서드안의 {} 블록 변수

 

- 저장창고

- 멤버필드 저장

- JVM이 관리

- 레퍼런스.*로 사용가능

  (ex season1.*로 사용가능)

- 인스턴스

- 참조타입, ENUM

사용

기간

 - 객체생성 전부터,

    모든 객체가 없어질 때 까지

    (가장 길다)

- 프로그램이 끝날때까지

- 명시적으로 NULL을 선언 할때까지

- 가비지 컬렉션의 대상이 된다.

 - {}나 메서드가 끝날때까지

    (가장 짧다)

 - 객체가 더이상 쓰이지 않거나

   명시적으로 NULL을

    선언할 때 까지

   (ex : season1 = null; )

- 가비지 컬렉션의 대상이 된다.

사용

범위

 - 같은 타입으로 만들어진 것

- 메서드 안에서

- {} 블록으로 지정된 곳 

- 자신 클래스의 모든 곳 

 

 

Static 영역에서

Season season1 = null; 을 선언만하고 프로그램 내에서 오랫동안 사용하지 않거나,

메모리가 부족하면 Season 클래스는 Static 영역에서 제거된다.

제거 대상이 되면 JVM이 필요에 의해 제거한다.

클래스 제거는 가비지 컬렉션(Garbage Collection)이라고 하며,

가비지 컬렉테가 수행한다.

 

Stack 영역은 블록 변수를 처리하므로 수명이 가장 짧다.

메서드가 끝나면 메서드 내의 블록 변수는 모두 제거된다.

 

Heap 영역은 객체가 생성되면 힙 역역에 멤버필드를 보관한다.

Season season1=null; 이 선언되면,

객체는 살아있으나 레퍼런스는 잃게 된다.

가비지(garbage, 쓰레기)가 되면서, 가비지 컬렉터가 판단하여 가비지를 제거한다.

 

 

출처 : 푸른하늘의 해가 되자 http://blog.naver.com/k97b1114/140149189763

'Dev. 자바 > API 및 이론' 카테고리의 다른 글

[API] java.util.Calendar  (0) 2012.08.03
[API] java.lang.Integer  (0) 2012.08.03
[API] java.lang.String  (0) 2012.08.03
[API] java.lang.Object  (0) 2012.08.03
간단한 자바 이론 정리 - string, stringbuffer, stringbuilder, date  (0) 2012.03.21

다른 카테고리의 글 목록

Dev. 자바/API 및 이론 카테고리의 포스트를 톺아봅니다