JaeWon's Devlog
article thumbnail
반응형

- 해당 내용은 백기선 님의 자바 온라인 스터디 공부 및 제출 목적

   -> https://github.com/whiteship/live-study/issues/1

 

1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. · Issue #1 · whiteship/live-study

목표 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JV

github.com


목표

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

학습할 것

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

1. JVM이란 무엇인가

  • 자바 가상 머신(Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체.
  • Java 소스 코드는 javac 컴파일러로 거쳐 바이트코드로 변환되며, 이 바이트코드는 JRE에 들어있는 java classloader에 의해 JVM으로 적재되며, JVM은 적재된 바이트코드를 JIT 컴파일 방식으로 실행.
  • JVM은 OS 독립적으로, JVM이 실행 가능한 환경이라면 어디서든 JAVA 프로그램을 실행시킬 수 있음.

 

2. 컴파일 하는 방법

  • 컴파일(Compile)이란 어떤 언어의 코드를 다른 언어(컴퓨터가 이해할 수 있는)로 바꿔주는 과정.
  • 컴파일을 하는 소프트웨어를 컴파일러(Compiler)라고 함.
  • Java 컴파일을 하기 위해서는 Java JDK가 설치되어 있어야 함.
  • 명령어 javac test.java

3. 실행하는 방법

  • 컴파일을 진행하면 test.class 라는 이름의 파일이 생성됨.
  • 이 파일(*.class)이 컴파일된 파일이며, java 실행 파일이라 할 수 있음.
  • 이 파일로만 실행할 수 있는 것이 아니고, 컴파일된 파일을 실행시켜주는 프로그램을 이용해야 하는데, 이 작업을 하는 프로그램을 런처(launcher)라고 함.
  • 명령어 java test
  • 런처는 내부적으로 자바 가상 머신에서 작성한 코드가 동작하도록 하며, 프로그래밍한 이 프로그램은 최종적으로 JVM에서 동작하게 됨.

java 컴파일 및 실행 과정

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

  • 바이트코드(Bytecode)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법.
  • 가상머신은 이 바이트코드를 각각의 하드웨어 아키텍처에 맞는 기계어로 다시 컴파일.
  • Java Compiler에 의해 변환된 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리며, 이러한 자바 바이트 코드의 확장자는 .class 이다.

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

  • 정의
    - 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러.
    - 동적 번역이라고도 불리며, 이 기법은 Java 프로그램의 실행 속도를 향상시키기 위해 개발.
  • - JIT 컴파일러는 Java 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는대 사용.동작
  • 동작- 실행 시점에는 인터프리트 방식으로 기계어 코드를 생성 하면서 그 코드를 캐싱.- 같은 함수가 여러번 실행 될 때 매번 기계어 코드를 생성하지 않고 바로 실행.
  • - 사전에 정의된 임계치에서 시작하여 호출될 때마다 감소시키며 자주 사용되는 함수를 찾는다. 
  • - JIT 컴파일러는 인터프리트 방식과 정적 컴파일 방식을 혼합한 방식으로 동작.

JIT 동작 과정

6. JVM 구성 요소

  • JVM은 다음과 같이 구성- 클래스 로더(class loader)- 가비지 컬렉터(Garbage Collector)
  • - JIT 컴파일러(Just-In-Time compiler)
  • - 자바 인터프리터(interpreter)
  • 자바 인터프리터
    - Java Compiler에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할.
  • 클래스 로더
    - Java 는 동적으로 클래스를 읽으며, 프로그램이 실행 중인 런타임에서야 모든 코드가 JVM과 연결.
    - 이러한 동적으로 클래스를 로딩해주는 역할. 
  • JIT 컴파일러
    - 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러.
    - 동적 번역이라고도 불리며, 이 기법은 Java 프로그램의 실행 속도를 향상시키기 위해 개발.
    - JIT 컴파일러는 Java 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는대 사용.
  • 가비지 컬렉터
    - JVM은 GC(가비지 컬렉터, Garbage Collector)를 이용하여 더이상 사용하지 않는 메모리를 자동으로 회수.
    - 이 기능을 통해 개발자는 따로 메모리를 관리하지 않아도 됨.

7. JDK와 JRE의 차이

  • JRE
    - JRE(자바 런타임 환경, Java Runtime Environment)은 Java Program을 실행시켜주는 환경을 구성해주는 도구.
    - 자바 프로그램을 실행하는 데 필요한 모든 패키지. 하지만 새 프로그램은 개발할 수 없다.
    - 일반인을 위한 자바 버전.
  • JDK
    - JDK(자바 개발 도구, Java Development Kit)은 Java Program 개발에 필요한 툴킷을 제공하는 도구.
    - 개발하며 실행을 해야 하기 때문에, JDK 안에 JRE가 포함.
    - 개발자를 위한 자바 버전.
  • JVM = 클래스 로더 시스템 + 런타임 데이터 영역 + 실행 엔진
  • JRE = JVM + Java 패키지 클래스 (util, math, lang, awt, etc...) + 런타임 라이브러리
  • JDK = JRE + 개발 / 디버깅 툴


참고

- namu.wiki/

- www.opentutorials.org/module/2495/13968

- tcpschool.com/java/java_intro_programming

- ko.wikipedia.org/wiki/

- c10106.tistory.com/3135

- opentutorials.org/course/1223/5245

반응형
profile

JaeWon's Devlog

@Wonol

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!