웹풀스택 공부 중
14 - 2. Java - JVM 본문
14 - 2. Java - JVM
JVM (Java Virtual Machine)
JVM은 이거 3개만 기억하면 된다는데…
- Class Loader - 실행을 위한 Bytecode를 가져온다
- 실행을 위한 Class들만 가져온다
- 동적 로딩으로 필요한것만 꺼내서 쓸 수 있다!
- Rutime Data Area - 메모리에 얹는다
- Execution Engine - 엔진 구동
Runtime Data Area의 영역
Thread Area
- Stack영역 - 각각의 Thread가 가지고 있다
- 기본타입 변수 (Primitive)는 Stack 영역에 직접 값을 가진다
private Integer v1
- Reference Type Variable은 Heap 영역에 객체 주소 값을 가진다
private int v2
- 기본타입 변수 (Primitive)는 Stack 영역에 직접 값을 가진다
- Stack영역 - 각각의 Thread가 가지고 있다
Non-Thread Area
공유 영역 - 모든 Thread가 공유한다
Method/Static 영역: 전역 변수, Static 변수, Final Class, Class의 필드와 메서드 정보등을 가진다
- 프로그램 시작부터 끝까지 메모리에 상주한다
- Static 영역: 객체화하지 않고 호출이 가능하다!
- 그래서 Heap 영역을 사용하지 않는다
Heap 영역: 객체 (Instance, 배열)을 저장한다
Garbage Collector의 대상이다!
3 가지로 나눠진다
- Application에서 사용중인
- Young Generation
- Tenured (Old) Generation
- 이곳이 GC에 의해 지워진다
- JVM에서 사용중인
- Permeanent Generation
- Application에서 사용중인
Java에서 Out-of-Memory error가 발생한경우, Heap 쪽에서 문제가 일어난곳이다
- 클래스를 과다하게 로딩하는 경우는 드물고
- Thread를 많이 만들어도 Thread Pool에 의해 막힌다
- 너무 많은 객체를 만들거나 사용한 객체를 치우지 않아서 생긴다
Garbage Collector
프로그램을 실행한다는 것 = 메모리에 필요한 함수나 객체를 올려서 실행한다는 것 = 다 쓰고나서 치워야한다는 것
- “설거지”
- Jav에서 JVM이 대신 프로그램이 생성한 객체를 자체 알고리즘으로 알아서 치워준다
- Minor GC / Major GC 모두 Stop-The-World Event이다
- STWE: 다른 스데르를 모두 멈춘다
- 메모리 영역을 잠구고 치운 후 다시 연다!
- 이 시간을 줄이면 더 효율적이긴하다
- STWE: 다른 스데르를 모두 멈춘다
- 효율적으로 동작시키기 위해 Heap 영역을 크게 2개의 물리적 공간으로 나눈다
- Young Generation
- 높은 주기, 짧은 시간
- Eden
- Survivor 0
- Survivor 1
- 여기서도 계속 사용이 된다면 Old Generation으로 옮겨진다
- Old Genreration
- 낮은 주기, 긴 시간
- Young Generation
Runtime Data Area (JVM Memory)
영역에 따른 3가지 Java의 변수 분류
- 정적(클래스) 변수 (Static Variable)
- 클래스 내 필드/메서드와 정적 필드 / 메서드
- ⇒ Method/Static 영역
- 인스턴스(객체) 변수 (Instance VariablE)
- new keyword로 인스턴스 생성 시 생성자로 적재한다
- ⇒ Heap 영역
- 지역 변수 (Local Variable)
- 메서드 호출 시 필요한 파라미터나 내부 변수이기에
- ⇒ Stack 영역에 적재한다
반응형
'웹개발 > Java' 카테고리의 다른 글
15 - 1. Java - Lombok (0) | 2024.11.04 |
---|---|
14 - 5. Java - Builder & 정적 팩토리 메서드 (1) | 2024.11.04 |
14 - 4. Java - Object 생성자 (0) | 2024.11.04 |
14 - 3. Java의 OOP 문법 - Encapsulation + Inheritence (0) | 2024.11.04 |
14 - 1. Java Exception (0) | 2024.10.31 |