Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 인프런
- ingress-nginx
- port forawrding
- kaniko
- multibranch
- sshtunneling
- vue3
- helm
- 인프런강의
- datagrip
- RDS
- ChatGPT
- Docker
- redis oss
- 워커노드
- helm-chart
- Certbot
- AWS
- ssafy #싸피 #ssafy 12기 #싸피 12기 #ssafy 합격 #싸피 합격 #합격 후기
- Kubernetes
- Tunneling
- 쿠버네티스
- elasticahe
- jnlp
- EC2
- cloud controller manager
- k8s
- ElastiCache
- argocd
- ssh
Archives
- Today
- Total
처누
[Java] JVM, 메모리 영역(method, stack, heap), static 본문
JVM이란
- Java Virtual Machine의 약자이며 자바 가상 머신이라고도 불린다.
- java의 바이트 코드를 해석하고 실행한다.
- OS에 종속받지 않고 실행할 수 있다. (JVM 설치만 하면 어디서든 java 파일을 실행할 수 있다는 뜻)
JVM의 컴파일 과정
- .java 파일을 컴파일러가 .class 파일로 변환(이 과정에서 바이트 코드가 생성)
- .class 파일을 JVM의 ClassLoader에게 보낸다.
- ClassLoader에서 JVM Running Data Area로 로딩(할당)하여 메모리에 올린다.
- Execution Engine
Class Loader에 의해 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행하는 역할.
명령어를 하나씩 실행하는 인터프리터(Interpreter)방식이 있고 JIT(Just-In-Time) 컴파일러를 이용하는 방식이 있다.
JIT 컴파일러는 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 Execution Engine이 네이티브 컴파일된 코드를 실행하는 것으로 성능을 높이는 방식이다.
- Garbage Collector(GC)
Heap 메모리 영역에 생성(적재)된 객체들 중에 참조되지 않은 객체들을 탐색 후 제거하는 역할
GC가 역할을 하는 시간은 정확히 언제인지 알 수 없다.
GC가 수행되는 동안 GC를 수행하는 쓰레드가 아닌 다른 모든 쓰레드가 일시정지된다.
Runtime Data Area
Runtime Data Area는 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.
Method Area
- 프로그램을 실행하는데 필요한 공통 데이터를 관리하고, 이 영역은 프로그램의 모든 영역(스레드)에서 공유한다.
- 클래스 정보(메서드, 생성자), static 변수, 공통 리터럴 상수 등을 저장한다.
- JVM이 종료 시 메모리에서 해제된다.(프로그램이 종료되기 전까지 메모리 상에 존재함.)
Heap Area
- new 키워드로 생성된 객체와 배열이 저장되는 공간.
- 참조형 데이터 타입이 저장됨.
- Garbage Collector가 이루어지는 영역이며 더 이상 참조되지 않는 객체는 GC에 의해 제거된다.
Stack Area
- 원시형 데이터 타입이 저장됨.
- 자바 실행 시, 하나의 실행 스택이 생성된다.
- 각 스택 프레임은 지역 변수, 중간 연상 결과, 메서드 호출 정보 등을 포함한다.
- 메서드를 호출할 때 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해당 스택 프레임이 제거된다.
- Heap 영역에 생성된 데이터의 참조값이 할당됨. 즉, new 키워드로 인스턴스를 생성할 때, Heap 영역에는 생성된 객체가 저장되고, Stack 영역에는 생성된 객체에 대한 주소값(Reference)가 저장된다.
- 각 스레드별로 하나의 스택이 생성된다. 따라서 스레드 수 만큼 스택 영역이 생성된다.(1:1)
PC(Program Counter) Register
- 각 스레드마다 하나씩 존재하며, 현재 실행 중인 JVM 명령의 주소를 저장한다.
- 스레드가 컨텍스트 스위칭을 할 때, PC 레지스터의 값이 변경된다.
컨텍스트 스위칭(Context Switching)이란?
여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것. 즉, CPU에 실행할 프로세스를 교체하는 기
Native Method Stack
- 자바 외의 언어로 작성된 네이티브 메서드를 호출할 때 사용되는 스택.
- C, C++ 등 네이티브 코드를 실행할 때 필요한 메모리를 저장한다.
- 각 스레드마다 하나씩 존재한다.
참고
'java' 카테고리의 다른 글
[JPA] 영속성 컨텍스트(Persistence Context) (0) | 2024.07.07 |
---|---|
[JPA] 변경 감지(Drity Checking)와 병합 (0) | 2024.06.21 |
[Spring] CrudRepository (0) | 2024.03.25 |
[IntelliJ] Port 8080 was already in use (0) | 2024.03.25 |
[Spring] IntellJ & mysql 연동 java.lang.classnotfoundexception com.mysql.cj.jdbc.driver오류 (0) | 2024.01.29 |