인스턴스: 클래스를 구현한 실체. 힙 메모리에 멤버 변수의 크기에 따라 메모리가 생성된다.
클래스를 기반으로 new 키워드를 이용해 여러 인스턴스를 생성한다.
인스턴스가 생성되면, Heap 메모리에 올라간다. 인스턴스를 참조하는 레퍼런스 변수(참조 변수)는 Stack 메모리에 올라간다.
참조 변수에는 참조 값이 할당된다.
참조 변수 - 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 - 생성된 인스턴스의 메모리 주소 값
JVM은 OS에게 할당받은 메모리 영역(Runtime Data Area)을 메소드, 힙, JVM 스택으로 세부영역으로 나눠 사용한다.
메소드 영역(Method Area)
- JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역.
- 사용되는 클래스들을 클래스 로더로 읽어 클래스별로 정적 필드와 상수, 메소드 코드 , 생성자 코드 등을 분류해서 저장.
- static 변수가 여기 저장됨.
힙 영역(Heap Area)
- 객체와 배열이 생성되는 영역
- 가비지 컬렉터의 대상이 되는 공간
- 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
- 참조하는 변수, 필드가 없다면 Garbage Collector가 수거해감.
JVM 스택 영역
- 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거.(push, pop)
- 프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가되거나 제거된다.
- 변수가 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때, 스택 영역에 변수가 생성된다.
- 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거됨.
- 기본 타입 변수는 스택 영역에 직접 값을 갖고 있고, 참조 타입 변수는 힙 영역에 있는 객체의 주소(참조값)를 갖고 있다.
'study > java' 카테고리의 다른 글
자바/JAVA Class 클래스 (0) | 2021.03.08 |
---|---|
자바/JAVA static, final, static final (0) | 2021.03.06 |
자바/JAVA LIFO, FIFO 컬렉션 (0) | 2021.02.15 |
자바/JAVA 스레드(2) (0) | 2021.02.13 |
자바/JAVA 스레드(1) (0) | 2021.02.11 |