티스토리 뷰
JVM이란
Java Virtual Machine의 약자로 OS의 종속적이지 않고 java코드를 독립적으로 해석할 수 있는 기능이다.
다른 언어의 경우 코드를 기계어로 번역하여 OS에서 처리하지만
java는. class파일 바이트코드로 변환하여 jvm이 해석한다.
그렇다면 OS의 종속적이지 않는다는 게 무슨 말일까?
다른 언어의 경우는 OS가 변경될 때마다 해당 운영체제에 맞는 형태로 컴파일을 진행해야 한다.
하지만 자바의 경우는 JVM이 해석하기 때문에 한번 컴파일한다면 OS를 변경하여도 컴파일을 다시 진행하지 않아도 된다.
그렇다면 JVM은 어떻게 설치할까?
JVM은 JDK를 설치하면 함께 설치된다.
JDK란 Java 프로그래밍 언어를 개발하고 실행하기 위해 필요한 도구와 라이브러리의 모음
JDK는 Oracle 공식 홈페이지에서 다운로드할 수 있다.
컴파일 방법
JDK에 내장되어 있는 Javac.exe를 통해 컴파일을 할 수 있다.
1. 메모장을 이용해서 아래와 같이 .java 파일을 저장한다.

2. 명령 프롬프트를 통해 .java파일을 저장한 경로로 이동한다.

3. javac xxxx.java 명령어를 통해 java 파일을 class 파일로 컴파일한다.

실행 방법
해당 파일경로에서 <java 파일명> 명령어를 통해 파일을 실행할 수 있다.

바이트 코드란 무엇인가
바이트 코드란 java 파일을 JVM이 해석할 수 있는 .class (바이트코드)로 변환하는 것이다.
바이트 코드는 JIT, 인터프리팅 언어를 통해 바이너리 코드로 변환된다.
즉, CPU가 이해하는 언어는 바이너리 코드, 가상 머신이 이해하는 코드는 바이트 코드이다.
JVM 구성요소
클래스 로더(Class Loader): JVM의 클래스 로더는 클래스 파일을 로딩하고 메모리에 올리는 역할을 담당합니다. 클래스 로더는 클래스 파일을 필요에 따라 동적으로 로딩하고 링크하는데, 이를 통해 Java의 동적 로딩 기능을 지원합니다.

실행 엔진(Execution Engine): 실행 엔진은 JVM의 핵심 컴포넌트로, 바이트 코드를 실행 가능한 기계 코드로 변환하고 실행합니다. 실행 엔진은 대부분의 JVM의 성능과 관련된 부분이며, 인터프리터, JIT 컴파일러, 가상 머신 해석기 등 다양한 방식으로 동작할 수 있습니다.
- 인터프리터(Interpreter): 바이트 코드를 한 줄씩 해석하고 실행합니다. 인터프리터는 바로 실행되기 때문에 빠르게 실행될 수 있지만, 반복적인 해석 작업은 오버헤드를 초래할 수 있습니다.
- JIT 컴파일러(Just-In-Time Compiler): 인터프리터의 단점을 보완하기 위해 도입된 기술로, 바이트 코드를 동적으로 기계 코드로 변환합니다. JIT 컴파일러는 빈도가 높은 코드 경로를 식별하여 기계 코드로 컴파일하여 실행 속도를 향상합니다.
- 가상 머신 해석기(Virtual Machine Interpreter): 몇몇 JVM에서는 바이트 코드를 해석기를 통해 실행합니다. 가상 머신 해석기는 인터프리터와 JIT 컴파일러 사이의 중간 형태로, 인터프리터보다는 느리지만 JIT 컴파일러에 비해 더 적은 메모리를 사용합니다.
JVM은 바이트코드를 해석할 때 인터프리터와 JIT 컴파일러로 동시에 해석한다.
보통 인터프리터로 해석하지만 자주 사용하는 클래스의 경우는 JIT 컴파일러로 컴파일하여 캐싱하여 저장한다.
그렇기 때문에 인터프리터를 사용하지만 속도적인 측면이 향상된다.
메모리 관리: JVM은 Java 프로그램의 메모리 관리를 담당합니다. 메모리 관리 기능에는 가비지 컬렉션(Garbage Collection)이 포함되며, 더 이상 사용되지 않는 객체를 자동으로 해제하여 메모리 누수를 방지합니다. 또한, JVM은 힙(Heap)과 스택(Stack) 메모리 영역을 관리하여 객체 및 메서드 호출에 필요한 메모리를 할당하고 해제합니다.
라이브러리: JVM은 Java 표준 라이브러리와 함께 제공되는 클래스와 메서드 집합을 포함합니다. 이러한 라이브러리는 Java 프로그램 개발에 필요한 다양한 기능을 제공하며, 입출력, 네트워킹, 데이터 구조, 암호화 등 다양한 영역을 다룹니다.
JDK와 JRE의 차이
JDK = Java Development Kit (자바 개발 키트)
JRE = Java Runtime Environment (자바 런타임 환경)
JDK는 컴파일, 실행, JVM, 라이브러리 등 자바의 관련된 전체적인 키트를 제공해 준다. (JDK안에 JRE가 포함된다.)
JRE는 컴파일된 자바 파일을 실행하는 구성을 가지고 있다. (JVM)
'개발 > Java' 카테고리의 다른 글
| [Java] 패키지 (0) | 2023.06.14 |
|---|---|
| [Java] 상속 (0) | 2023.06.08 |
| [Java] 클래스 (0) | 2023.06.07 |
| [Java] 제어문 (0) | 2023.06.05 |
| [Java] 자바 데이터 타입, 변수 그리고 배열 (0) | 2023.06.02 |