JVM, JRE, JDK
JVM (Java Virtual Machine)
- 자바 가상 머신으로 자바 바이트 코드(.class)를 각 OS에 특화된 코드로 변환(인터프리터, JIT 컴파일러)하여 실행한다.
- 그래서 OS에 종속적이다.
JRE (Java Runtime Environment)
- JVM + 라이브러리
- 자바 애플리케이션을 실행시키기 위한 환경이다.
- 즉, 실행시키기 위한 것이지 이것으로 개발을 할 순 없다.
JDK (Java Development Kit)
- JRE + 개발에 필요한 툴
- 자바 11부터는 JRE를 따로 제공하지 않는다.
- 애초에 개발자들은 개발을 해야하기 때문에 JDK를 설치해야 한다.
JVM 내부 구조
메모리
- 메소드 영역에는 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드, 변수, static) 저장, 공유의 자원이다. 즉, 다른 영역에서도 참조할 수 있는 영역이 메모리 영역이다.
- 힙 영역에는 객체(Object)들이 저장이 된다.
- 스택 영역에는 힙 영역에 생성된 객체의 참조값이 할당된다. 그리고 원시타입의 데이터가 할당된다.
- 스택 영역에는 각 스레드마다 런타임 스택을 만들고, 그 안에 메소드를 스택으로 쌓아올린다. 그리고 쓰레드가 종료되면 런타임 스택도 사라진다.
Execution Engine
- 인터프리터가 바이트 코드를 한줄 한줄씩 읽어 실행한다. 하지만 문제점이 읽을 때 같은 바이트 코드를 계속 한 줄씩 읽어나간다는 것이다.
- 그래서 인터프리터의 효율을 높이기 위해 JIT 컴파일러를 사용한다.
- 이 JIT 컴파일러는 반복적인 바이트 코드를 모두 네이티브 코드로 변환해준다. 즉, JIT 컴파일러는 바이트 코드를 네이티브 코드로 변환시켜주고 인터프리터는 그 변환된 네이티브 코드를 실행시켜주는 것이다.
- GC(Garbage Collector)는 더 이상 참조되지 않은 객체들을 모아서 없애버리는 역할을 한다.
JNI (Java Native Interface)
- 자바 애플리케이션에서 C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법을 제공한다.
클래스 로더
- 클래스 로더가
.class
인 파일을 읽고 바이너리 데이터를 만들어서 메소드 영역에 저 장을 한다. 메소드에 저장하는 데이터는 다음과 같다.- FQCN(Fully Qualified Class Name): 클래스가 속한 패키지명을 모두 포함한 이름
- 메소드, 변수
- 인터페이스, Enum, 클래스
- 로딩이 끝나면 해당 클래스 객체를 힙 영역에 저장을 한다.
References
'Java' 카테고리의 다른 글
[자바 라이브 스터디] 01. JVM과 자바 코드 (0) | 2021.09.15 |
---|---|
[자바 라이브 스터디] 00. 자바 기본 공부 계획 (0) | 2021.09.13 |
클래스 활용 (0) | 2020.09.09 |
상속 기초 (0) | 2020.09.09 |
클래스 기초 (0) | 2020.09.06 |
댓글