일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c언어
- 네트워크
- Galera Cluster
- JavaScript
- Heap
- design pattern
- Java
- 알고리즘
- mongoDB
- Algorithm
- 운영체제
- spring webflux
- 백준
- Spring
- Proxy
- C
- MSA
- OS
- 자바
- IT
- react
- JPA
- redis
- Kafka
- 컴퓨터구조
- 디자인 패턴
- MySQL
- 자료구조
- 파이썬
- Data Structure
Archives
- Today
- Total
시냅스
자바 가상 머신, JVM이란 본문
자바 가상 머신, JVM이란
- 운영체제에 독립적으로 실행하게 하는 버츄얼 머신
- 자바는 컴파일 과정에서 OS와 소통하는 기계어로 컴파일 되지 않고 JVM이 이해할 수 있는 Java bytecode(.class) 로 변환된다.
- JVM이 이 bytecode를 OS가 이해할 수 있게 해석한다.
자바 바이트 코드, Java Bytecode
- 바이트 코드란 가상 컴퓨터(VM)에서 돌아가는 실행 프로그램을 위한 이진 표현법을 의미한다.
- 자바 바이트 코드(Java bytecode)는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미한다.
- 변경된 자바 바이트 코드(.class) 파일들을 클래스 로더를 통해 JVM 메모리 영역으로 로딩한다.
- 이 바이트 코드는 다시 인터프리터 또는 JIT 컴파일러에 의해 바이너리 코드로 해석된다.
- JIT(just-in-time compliation)는 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고, 바이너리 코드를 직접 실행하는 방식이다.
- 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 인터프리팅 방식보다 빠르다.
- 기계어(컴파일된 코드)는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 빠르게 수행하게 된다.
- 한 번만 실행되는 경우라면 인터프리팅이 훨씬 빠를 수 있다.
클래스 로더, Class Loader
- JVM 위에 자바 바이트 코드(.class)를 로딩한다.
- 또한 링크를 통해 배치하는 작업을 수행한다.
- 로더와 링커의 기능을 동시에 수행하는 모듈이다.
실행 엔진, Excution Engine
- 메모리에 적재된 바이트 코드(.class)를 기계어로 변경, 명령어 단위로 실행
- 바이트 코드를 운영체제에 맞게 해석한다.
Runtime Data Area
- 힙 영역
- 런타임에 동적으로 할당되는 데이터가 저장되는 영역. 객체나 배열 생성이 여기에 해당
- 스택 영역
- 지역변수, 매개변수, 메소드 정보, 임시 데이터 등을 저장
- 메서드 영역
- JVM이 시작될 때 생성되고, JVM이 읽은 각각의 클래스와 인터페이스에 대한 런타임 상수 풀, 필드 및 메서드 코드, 정적 변수, 메서드의 바이트 코드 등을 보관함
- 런타임 상수 풀을 상수 자료형을 저장하기 위해 따로 존재하는 공간이다.
- PC 레지스터
- 스레드가 어떤 명령어로 실행되어야 할지 기록하는 부분(JVM 명령의 주소를 가짐)
- 네이티브 메서드 스택
- 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
'Java, Spring' 카테고리의 다른 글
IOC와 DI, 컨테이너 (0) | 2022.07.25 |
---|---|
좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2022.07.15 |
[Java] 객체지향(OOP) 관련 용어 정리 (0) | 2022.07.15 |
[Java] Generic - 와일드 카드 Wildcard (0) | 2022.07.11 |
[JAVA] Equals와 hashcode (0) | 2022.07.11 |
Comments