0. 출처
[Java] JVM 구조와 메모리 영역 - Method, Heap, Stack Area
1. JVM 동작 과정
JVM은... 많이 알겠지만 Java Virtual Machine이고, 자바 바이트 코드를 OS에 맞게 해석해주는 역할을 한다.
또 메모리 관리도 담당한다. (GC는 Java 7부터 힙 영역의 객체들을 관리하는 역할을 한다.)
자바 코드가 JVM을 통해 실행되기 때문에 플랫폼에 구애받지 않는다는 것이 장점이라는 것도? 많이 알고 있을 것이다.
메모리 영역을 알아보려면, JVM이 자바 코드를 어떻게 OS에서 실행하는지 그 과정을 알아볼 필요가 있다.
- 자바 코드(.java 파일)는 컴파일러가 자바 바이트 코드인 .class 파일로 변환된다.
- .class 파일을 JVM의 클래스 로더에게 보낸다.
- 클래스 로더는 JVM 런타임 데이터 영역으로 로딩하여 JVM의 메모리에 올린다.
2.메모리 영역
Method 영역
static = class = method 영역.
전역 변수나 static으로 선언되는 것들은 메모리에 상주시킨다.
- JVM이 동작해서 클래스가 로딩될 때 생성된다.
- JVM이 종료될 때까지 유지된다.
Heap 영역
힙 영역은 인스턴스를 생성할 때 생성되는 메모리 형식이다.
- "new"를 사용해서 객체를 생성할 때 저장된다.
- 힙의 참조 주소는 Stack이 갖고 있고, 해당 객체를 통해서만 힙 영역에 있는 인스턴스를 핸들링할 수 있다.
- GC가 정리하기 전까지 남아있다.
Stack 영역
스택 영역은 int, long, boolean 등 기본 자료형 생성 시 저장하는 공간으로,
임시 사용 변수나 정보들이 저장되는 영역이다..
- Thread별 1개만 생성
- 하나의 thread가 내부적으로 static, heap, stack 영역을 갖게 된다. (그래서 thread끼리 접근은 안되도 static, heap 영역을 공유하여 사용할 수 있다..)
- 메서드 호출될 때마다 생성하고, 실행이 끝나면 pop되어 제거된다.
'코딩 > Java' 카테고리의 다른 글
Java - 동시성 환경에서의 블로킹 vs 논 블로킹 (1/2) (0) | 2023.06.21 |
---|---|
Java - synchronized와 volatile (0) | 2023.06.20 |
Java - Static에 대하여... (0) | 2023.06.11 |
Java - Interface에 Abstract가 아닌 메서드를 작성할 수 있다?? (0) | 2022.02.05 |
Java Singleton Pattern(싱글톤 패턴) (0) | 2022.01.26 |