코드 그라데이션
JVM 기본 구조 (1) 본문
컴퓨터를 구성하는 것이 일반적으로 S/W + H/W 이고
H/W의 구성 요소 중 대표적인 게 CPU(연산 장치)
CPU가 인식할 수 있는 코드를 Machine code라고 부른다.
이 머신 코드는 프로세스마다 구체적인 값이 좀 다른데, 그것은 CPU 데이터 시트지를 봐야 할 수 있다.
그것은 좀 일반적으로 공통된 형태로 바꿔서 나온 것을 어셈블리어라고 부른다.
네이티브 코드 개발자는 컴파일러가 아예 머신 코드에 대고 번역을 해버린다.
그래서 어떤 하이레벨 언어의 코드가 있다면 그걸 CPU가 인식할 수 있는 기계로 바꾼다.
그리고 여기까지를 플랫폼이라 한다.
OS + CPU + RAM(/SSD) = JVM
http://hoonmaro.tistory.com/19
출처 훈마로의 보물창고
JVM(Java Virtual Machine)
크게 4가지 정도로 이루어져 있다.
1) 클래스 로더
클래스 로딩 해서 여러 클래스가 있으면 링킹도 하고 초기화해서 어떤 실질적인 실행으로 넘어가는 역할.
- Loading, linking, initialization
- 자바는 클래스들을 동적으로 로딩하며, 필요한 클래스들을 찾아서 메모리에 적재다. 이는 자바의 유연성과 동적 로딩의 특징 중 하나.
2) Execution Engine
- Method, Heap, Stack area
- PC register
- Native method stack
자바 바이트 코드라고 되어 있는 걸 인터프리트 하게 되고 이걸 실행으로 가져가서 JIT 컴파일러 통해 실행도 하고,
경우에 따라서 네이티브 코드로 아예 변환해서 빠른 처리가 가능하도록 만들어준다.
이 실행(=연산) 과정에서 다양한 메모리들을 사용하게 된다.
그런데 JVM이 기본적으로 Stack Based Machine과 비슷한 형태로 구현이 되어 있어서 그러다보니 스택 형식(함수)
그런데 스택의 내부적인 구현 형태는 네이티브 코드와는 조금 차이가 있다. 배열의 형태.
- 클래스 로더에 의해 메모리에 적재된 바이트 코드를 실행하는 역할.
- 바이트 코드는 자바 컴파일러에 의해 생성된 중간 코드로, JVM이 이를 해석하거나 JIT(Just-In-Time) 컴파일러를 통해 네이티브 코드로 변환하여 실행
3) Runtime Data Area
- Interpreter
- JIT compiler
- Garbage collector
- 런타임 데이터 영역은 JVM이 프로그램을 실행하는 동안 사용하는 데이터를 저장하는 메모리 영역.
- 이 영역에는 메소드 영역, 힙, 스택 등이 포함되며, 각각의 영역은 특정한 목적을 수행.
- 메소드 영역에는 클래스 수준의 정보가 저장되고, 힙에는 객체 인스턴스가 저장되며, 스택에는 메소드 호출과 관련된 지역 변수와 연산 결과가 저장된다.
Stack 하면 자동으로 따라오는 단어가 "자동"
함수를 call 하게 되면 스코프가 열리고 리턴하면서 닫히는 형태인데,
이 사이에서 지역변수 같은 것을 선언해서 메모리를 쓰게 되는데, 이 형식이 primitive / 참조 형식이 있다.
참조영역이 관리되는 영역은 힙 영역이었다.
프로그램 카운터 레지스터
실행 코드가 있다고 한다면 이게 어디서 작동중인지, 명령어들의 실행 순서가 어떻게 되는지 등을 가지고 있는 곳.
이런 부분들로 채워져 있다.
4) Garbage Collector
- 가비지 컬렉터는 프로그램에서 더 이상 사용되지 않는 객체를 찾아 메모리에서 해제하는 역할.
- 자바는 자동 메모리 관리를 지원하며, 가비지 컬렉터는 더 이상 참조되지 않는 객체들을 주기적으로 식별하여 제거하여 프로그래머가 명시적으로 메모리를 관리할 필요가 없게 만들어준다.
• Native method interface
• Native method library(.dll)
무엇보다 여기서 가장 중요한 것은 Heap Area!
메모리를 쓴다고 했을 때 가장 많이 쓰는 부분이 바로 힙 영역이다.
'백엔드 면접' 카테고리의 다른 글
JVM Runtime data area + (0) | 2024.03.28 |
---|---|
JVM 기본 구조(2) (0) | 2024.03.27 |
SSL인증서는 어디에 설치되는가? (0) | 2024.03.26 |
WAF와 Proxy 구조 (0) | 2024.03.25 |
IPS와 Inline 구조 (1) | 2024.03.24 |