2013년 9월 24일 화요일
JVM 메모리 구조
JVM의 메모리 구조
그러나 자바 프로그래밍에서는 스태틱, 스택, 힙영역에만 중점을 둔다.
스태틱 영역에는 클래스가 컴파일되어 올라간다. 스택영역에는 기본적으로 하나의 선입후출(FILO) 스택 구조를 가지는 영역이 준비되고, 이곳에서 기본 타입에 대한 연산과 메서드 블록 변수가 계산된다. 필요한 객체를 생성하여 사용하려면 객체를 위한 힙 영역이 필요하다. 힙의 한 부분에 존재하는 리터럴풀(literal pool)이라는 영역은 new 키워드를 사용하지 않는 문자열을 저장한다.
스태틱, 스택, 힙 영역의 차이점을 보자면, Car car = null; 이라 선언만 하고 프로그램 내에서 오랫동안 사용하지 않거나 메모리가 부족하면 Car클래스는 스태틱 영역에서 제거된다. 제거대상이 되면 JVM이 필요에 의해 제거한다. 클래스 제거는 가비지 컬렉션(Garbage Collection, GC : 쓰레기를 수집하고 정리)라고도 하며, 가비지 컬렉터가 이를 수행한다. 스태틱 영역은 블록 변수를 처리하므로 수명이 가장 짧다. 메서드가 끝나면 메서드 내의 블록 변수는 모두 제거된다. 객체는 생성된 다음 힙 영역의 멤버 필드를 보관한다. Car car1 = null; 하면 객체는 살아있으나. 레퍼런스는 잃게 된다. 이런 것이 가지비이며, 가비지 컬렉터가 판단하여 가비지를 제거한다.
* static 메서드는 static 필드를 사용하지만 멤버 필드는 사용할 수 없다. 그러나 멤버 메서드는 static 필드를 사용할 수 있다.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기