JVM 이해하기

Chori·2021년 11월 1일
3

Java 깊게 파고들기

목록 보기
1/1
post-thumbnail

1. JVM이란 무엇인가

JVM : Java Virtual Machine(자바가상머신)

사람이 에디터로 .java파일을 생성하면 기계가 알 수 없는 고급언어 파일이 된다.
이 파일을 기계가 읽을 수 있게 변환하는 작업을 Compile(컴파일)이라고 하며,
Compile된 파일은 bytecode(바이트 코드)로 이루어진 .class 파일이 된다.

하지만 bytecode는 기계어가 아니기 때문에 OS에서 실행 할 수 없다.
bytecode로 이루어진 .class 파일을 실행하기 위해서 JVM이 필요하다.

정리하면 JVM란 .java를 실행하기 위한 가상 머신이다.
JVM은 결코 단순치 않다. java파일을 실행하기 위해서 여러가지 절차를 거친다.
JVM의 대한 자세한 설명은 아래 5. JVM 구성 요소에 정리했다.

2. Compile(컴파일) 되는 과정

에디터를 통해 .java 파일을 생성한다.
그리고 JavaComplier의 javac 명령어를 통해 .java파일을 컴파일하면
bytecode 이루어진 .class파일이 생성된다. 이 과정을 Build or Compile이라고 한다.

Build를 통해 생성된 .class파일은 ClassLoader에 의해 JVM내에 Load(적재)되고,
Execution Engine에서 기계어로 해석되어 JVM 내의 Runtime Data Area(메모리)에 배치된다.

bytecode가 ClassLoader를 통해 JVM에 적재되면 interpreter가 bytecode를 한줄 씩 기계어로 해석한다.

3. bytecode(바이트코드)란 무엇인가

bytecode는 하드웨어가 아닌 가상머신에서 실행되는 프로그램을 위한 이진표현법이다.
소프트웨어에 의해 처리되기 때문에 보통 기계어보다 더 추상적이다.
가상머신은 bytecode를 각각의 하드웨어 아키텍처에 맞는 기계어로 다시 Compile한다.

bytecode라는 명칭은 Java, JVM에서 대표적으로 사용하는데,
다른 가상머신용 bytecode까지 통틀어 bytecode라고 부르는 경우도 있다.
때문에 Java에서는 혼동하지 않기 위해 Java bytecode라고 명시적으로 기술하는 경우가 많다.

bytecode는 interpreter 방식으로 해석한다.
bytecode를 생성하는 것까지 Compile이고, bytecode 자체는 인터프리터 언어다.

4. JIT 컴파일러란 무엇이며 어떻게 동작하는지

JIT(Just-in-Time) 컴파일러는 bytecode를 기계어로 번역하는 프로그램이다.
처음 실행될 때, 인터프린팅하면서 자주 사용하는 코드를 캐싱하여 가져다 쓰기 때문에
인터프리터의 느린 실행 속도를 개선할 수 있다.

Java Virtual Machine의 경우 메소드 영역에 있는 코드 캐시(Code Cache)
공간에 JIT로 컴파일된 기계어 코드를 캐싱한다.

다른 컴파일러와 다른 점은 코드를 컴파일 한 후에 JIT 컴파일러를 실행한다는 점이다.
Java 프로그래밍 환경에서 JIT 컴파일러는 해석해야 하는 지시사항을 포함하는 프로그램인
Java bytecode를 프로세서로 직접 전송할 수 있는 명령으로 변환한다.

JIT 컴파일러는 자바기반 애플리케이션에서 성능을 최적화하는데
사용되기 때문에 자바런타임 환경에서 일반적으로 사용된다.

5. JVM 구성 요소

이미지로 정리를 해봤다..

6. JDK와 JRE의 차이

JDK(Java Development Kit)는 자바를 실행하고, 개발할 수 있는 종합적인 툴이다.
JRE(Java Runtime Environment)는 자바를 실행하는데 필요한 툴이다.

JDK는 JRE를 포함하고 있다.

해당 포스트는 백기선 라이브 스터디 1주차를 참고하여 학습한 내용입니다.

profile
꾸준한 성장

1개의 댓글

comment-user-thumbnail
2021년 11월 1일

좋은내용 감사합니다

답글 달기