[JAVA] JVM, JRE, JDK

BlueSky·2023년 10월 11일
0

JAVA

목록 보기
1/2
post-thumbnail

한번 쓰고 모든 곳에서 실행한다(Write Once, Run Anywhere / WORA) - JAVA의 철학

1. JVM(Java Virtual Machine)


자바 가상머신(Java Virtual Machine)의 약자로, 자바를 실행하는 머신으로 쉽게 말하면 자바를 돌리는 프로그램이다. 자바로 작성된 모든 프로그램은 JVM에서만 실행될 수 있으니 무조건 JVM이 설치되어 있어야 한다.

✅ 보통 JRE(Java Runtime Environment)에 포함되어 있기 때문에, 컴퓨터 운영체제에 맞는 자바 실행환경(JRE)가 설치되어 있으면 기본적으로 자바 가상 머신이 설치되어 있다는 것이다.

1) JVM 특징

  • 모든 플랫폼(어느 기기, 어느 운영체제)에서 자바 프로그램이 제약 없이 동작한다.(이식성이 높음)
    -> 컴파일된 코드와 하드웨어/OS 사이 중간에서, 해당 하드웨어/OS 환경에 알맞게 JVM이 Byte Code에서 한번 더 기계어로 변환해준다.
1. 	Java Compiler가 Java로 작성된 소스 코드(.java)를 Byte Code(.class)로 컴파일한다.
2.	JVM이 컴파일된 Byte Code를 기계어로 변환한다.
3.	JVM에 의해 컴파일된 기계어는 바로 CPU에서 실행되어 사용자에게 서비스를 제공한다.
  • 자바 프로그램의 메모리를 효율적으로 관리 & 최적화해준다.
  • JVM은 운영체제에 종속적이므로, 각 운영체제에 맞는 자바 가상 머신을 설치해야 한다.

2) JVM의 단점

  • 두 번의 컴파일로 인한 속도의 문제는 발생한다.
    -> 이를 보완하기 위해 JIT 컴파일러 내부 프로그램을 사용하여 필요한 부분만을 기계어로 바꾸어 성능 향상을 하였지만 그래도 C언어의 실행 속도처럼 빠르지는 않다.

JIT 컴파일러(Just-In-Time Compiler)?

런타임 시 JVM이 클래스 파일을 로드하고 각 개별 바이트 코드의 시맨틱을 판별하여 
해석할 때 속도가 느려지는데, 이를 해결하기 위해 런타임 시 바이트 코드를 원시 머신 
코드로 컴파일함으로써 Java 프로그램의 성능을 향상시키는 데 도움을 준다.
JIT 컴파일러는 같은 코드를 매번 해석하지 않고, 실행할 때 컴파일을 하면서 
해당 코드를 캐싱하여, 이후 바뀐 부분만 추가로 컴파일하고 나머지는 캐싱된 코드를 
사용함으로써 성능을 향상시키는 동적 번역(Dynamic Translation)을 수행한다.

자바 프로그램의 실행 과정
1. 소스코드(.java)를 작성
2. 컴파일러(Complier)는 자바 소스코드를 이용하여 클래스 파일(.class)을 생성 -> JVM이 인식할 수 있는 바이트 코드 파일
3. JVM은 클래스 파일의 바이트 코드를 해석하여 바이너리 코드로 변환하고 프로그램 수행
4. 소스코드의 수행 결과가 컴퓨터에 반영

2. JRE(Java Runtime Environment)


  • JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있는 패키지
  • 자바 클래스 라이브러리(Java Class Libraries)와 자바 클래스 로더(Java Class Loader), 자바 가상 머신(Java Virtual Machine)이 포함되고 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일(jar 파일)을 가짐
  • 개발 관련 도구는 포함되지 않기 때문에 JRE 만으로 Java 파일을 컴파일 할 수 없음
  • JVM이 원할하게 잘 작동할 수 있도록 환경을 맞춰주는 역할,

3. JDK(Java Development Kit)


자바 애플리케이션을 구축하기 위한 핵심 기술 패키지 중 하나로, 개발자들이 JVM과 JRE에 의해 실행되고 구동될 수 있는 자바 프로그램을 생성(개발)할 수 있게 해준다.

  • JDK는 JRE을 포함하고, JRE는 JVM을 포함하기 때문에, JDK를 설치하면 JRE, JVM은 자동으로 설치된다.
  • JDK에는 "자바 컴파일러(javac, java compiler)"를 포함한다. 컴파일러란, 우리가 작성한 자바 문법을 컴퓨터가 이해할 수 있는 기계어로 바꿔주는 번역기이다. .java -> .class

0개의 댓글