goal
자바의 메모리 구조(JVM구조)를 이해한다.
* 자바의 메모리구조 (static / stack / heap)
개념 | 설명 |
static | 클래스들의 놀이터 - 클래스 멤버 변수가 할당되며 JVM이 종료될 때 까지 존재한다. |
stack | 메서드들의 놀이터 - 메소드들의 각각은쓰레드라 볼 수 있다. - 메소드로 넘겨 받은 매개변수, 메소드 안의 지역변수가 할당 |
heap | 객체들의 놀이터 - 객체 멤버 변수가 할당된다. (참조변수) - 객체는 사용되지 않을 경우 가비지 컬렉터에 의해 소멸 - 객체 소멸시에, Heap에 저장된 객체 멤버 변수도 같이 소멸된다. |
[1] static
- static - "정적"
컴파일 시간동안 할당 된 메모리이며, 고정된 공간을 차지한다.
런타임 중에 변경할 수 없는 특징을 가진다.
잘 사용할 경우 메모리상의 이점을 가질 수 있다.
잘못 사용할 경우 정적 메모리는 공유되는 자원으로써 멀티 쓰레드 환경에서 치명적 버그를 발생할 수 있다.
[2] stack
LIFO 방식을 취한다.
stack 메모리에 데이터를 넣는 행위를 push, 빼는 행위를 pop이라고 한다.
기본 자료형의 지역변수와, 매개변수의 데이터 값이 저장되며 추가적으로 객체 생성 시 참조 주소값도 저장된다.
[3] heap
참조형의 데이터 객체의 실제 데이터들이 담기는 공간이다.
public class Student {
int age = 10;
int name = "Min";
}
class Sample {
public static void main(String[] args){
Student std1 = new Studet();
Student std2 = new Student();
}
}
이미지와 같이, stack영역에 저장된 참조변수가 heap영역의 데이터를 찾아서 사용한다.
중요한 것은, new
키워드로 인스턴스가 생성되어질 때 메모리에서 가리키는 인스턴스는 서로 다르다는 것이다.