일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- Scala
- Lambda architecture
- HIVE
- slack
- HBase
- Example DAG
- ambari
- MapReduce
- LDAP
- SlackWebhookOperator
- Kafka
- NoSQL
- HDFS
- re
- Service
- 빅데이터
- slack app
- hadoop
- docker
- execution_date
- 정규표현식
- Namenode
- 람다 아키텍처
- HDP
- airflow
- jupyter
- Windows
- python
- yarn
- Today
- Total
IT 삽질기
JVM이란? 본문
이번 글에서는 jvm이 무엇인지 어떻게 구성되어 있는지에 대해서 간단히 살펴보도록 하자.
JVM(Java Virtual Machine)이란?
JVM이란 java 바이트코드를 실행할 수 있는 주체로 java는 JVM을 이용하여 플랫폼에 독립적이며 이론적으로 CPU나 운영 체제의 종류와 무관하게 동일하게 작동하는 것을 보장한다. 또한 메모리 관리, Garbage collection을 수행하는 스택 기반의 가상머신이다.
JVM의 구조를 그림으로 살펴보자.
이번 글에서는 JVM의 기본 구조만 다루는 것으로 각각의 구성 요소들이 어떤 역할을 하는지 간단하게만 설명하도록 한다.
Class Loader
Class Loader은 컴파일된 java 바이트코드를 runtime data areas 영역으로 로드하고 링크를 통해 배치하는 작업을 한다.
Class Loader Runtime시 동적으로 클래스를 로드하며, 클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크한다는 것에 주의하자. 또한 계층 구조로 이루어져 있으며, 자세한 사항은 Class Loader에 대해 따로 정리하도록 한다.
Runtime Data Areas
Runtime Data Areas는 JVM이 운영체제 위에서 실행되면서 할당받는 메모리 영역을 뜻하며 6개의 영역으로 이루어져 있다.
- PC 레지스터
- JVM 스택
- 네이티브 메서드 스택
- Heap(힙) 영역
- Method(메서드) 영역
- 런타임 상수 풀
Runtime Data Areas에 대한 자세한 내용 역시 별도의 글을 통해 설명하도록 한다.
Execution Engine(실행 엔진)
앞서 개발된 java가 컴파일이 된 후 Class Loader이 java 바이트 코드를 Runtime Data Areas로 옮겨지게 되었다. 이렇게 배치된 바이트 코드는 실행 엔진에 실행되게 되는데, 실행 엔진은 바이트 코드를 명령어 단위로 읽어 기계가 실행할 수 있는 형태로 변형되게 되며 인터프린터, JIT(Just-In-Time) 컴파일러 방식으로 처리된다.
인터프리터, JIT에 관한 내용 역시 추후 별도의 글을 통해 정리하도록 한다.
참고자료
https://d2.naver.com/helloworld/1230
https://asfirstalways.tistory.com/158
https://www.itworld.co.kr/news/110837
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0
'개발 > java' 카테고리의 다른 글
FQCN (Full Qualified Class Name) (0) | 2021.07.18 |
---|---|
windows에 OpenJDK설치하기 (0) | 2020.06.17 |
클래스 멤버와 인스턴스 멤버 (0) | 2020.02.29 |
java 클래스/인스턴스/객체 (0) | 2020.02.23 |