JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

놀아·2020년 12월 14일
0

자바 스터디

목록 보기
1/7

목표

자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.

학습할 것

  1. JVM이란 무엇인가
  2. 컴파일 하는 방법
  3. 실행하는 방법
  4. 바이트코드란 무엇인가
  5. JIT 컴파일러란 무엇이며 어떻게 동작하는지
  6. JVM 구성 요소
  7. JDK와 JRE의 차이

1. JVM이란 무엇인가

JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다.
자바파일(.java)를 (.class)파일로 바꾼다음 java 키워드로 바이트 코드가 포함된 class 파일을 실행 시킨다.

2. 컴파일 하는방법

  1. jdk 폴더를 환경변수에 등록한다.
  2. 작성한 *.java 파일을 javac 키워드로 컴파일 한다.

3. 실행하는 방법

  1. 컴파일한 파일을 java 클래스이름으로 실행한다.
    🧨 단 *.class 파일로 실행할 수 없다 이름으로만 가능하다.

4. 바이트코드란 무엇인가

자바 바이트 코드(Java bytecode)란 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다. 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있습니다.

  • 바이트 코드를 눈으로 확인할 수 있습니다.

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

JIT (Just-In-Time) 컴파일러는 런타임시 Java 애플리케이션의 성능을 향상시키는 Java Runtime Environment의 구성 요소입니다. 보통 자바에서 컴파일을 하면 바이트코드를 통하여 머신으로 인터프리터하게 실행하는데, 해석할 때의 반복되는 구문을 저장하는 곳이 JIT 컴파일러 입니다.

6. JVM 구성 요소

출저 : https://asfirstalways.tistory.com/158

  • Class Loader(클래스 로더)
    JVM내로 클래스(.class파일)를 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. Runtime 시에 동적으로 클래스를 로드한다. jar파일 내 저장된 클래스들을 JVM위에 탑재하고 사용하지 않는 클래스들은 메모리에서 삭제한다. (컴파일러 역할) 자바는 동적코드, 컴파일 타임이 아니라 런타임에 참조한다. 즉, 클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크한다는 것이다. 그 역할을 클래스 로더가 수행한다.
  • Execution Engine(실행 엔진)
    클래스를 실행시키는 역할이다. 클래스 로더가 JVM내의 런타임 데이터 영역에 바이트 코드를 배치시키고, 이것은 실행엔진에 의해 실행된다. 자바 바이트코드는 기계가 바로 수행할 수 있는 언어보다는 비교적 인간이 보기 편한 형태로 기술된 것이다. 그래서 실행 엔진은 이와 같은 바이트코드를 실제로 JVM내부에서 기계가 실행할 수 있는 형태로 변경한다. 이 때 두 가지 방식을 사용하게 된다.
  • Interpreter(인터프리터)
    실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행한다. 하지만 이 방식은 인터프리터 언어의 단점을 그대로 갖고 있다. 한 줄 씩 수행하기 때문에 느리다는 것이다.
  • JIT(Just - In - Time)
    위에서 언급하였다.
  • Garbage collector
    GC를 수행하는 모듈 (쓰레드)이 있다.
  • Runtime Data Area
    프로그램을 수행하기 위해 OS에서 할당받은 메모리 공간

7. JDK와 JRE의 차이

출저 : https://wikidocs.net/257

JDK (Java Development Kit)
JDK는 JRE + 개발을 위해 필요한 도구(javac, java등)들을 포함한다.

JRE (Java Runtime Environment)
JRE는 JVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현했다고 할 수 있다.

참고

https://asfirstalways.tistory.com/158 JVM 구성요소 자료 참고
https://wikidocs.net/257 JDK와 JRE의 차이

profile
머리가 나쁘기 때문에 메모와 정리를 한뒤에 찾아보기

0개의 댓글