soft IT life

[Java] JVM, JRE, JDK 차이점 & Compiler에 대해 본문

JAVA

[Java] JVM, JRE, JDK 차이점 & Compiler에 대해

softPattern 2024. 1. 3. 19:32

참고

https://www.ibm.com/blog/jvm-vs-jre-vs-jdk/

 

JVM vs. JRE vs. JDK: What's the Difference? - IBM Blog

How do JVM, JRE and JDK relate and work together in the Java development process? Java is one of the most popular programming languages used in developing environments today. It is primarily used for back-end development projects, game development and desk

www.ibm.com

https://bengalseok91.tistory.com/17

 

바이트 코드와 바이너리코드 & 기계어

사람이 이해할 수 있는 high-level language x = 10 + 2 y = x + 4 기계가 이해할 수 있는 low-level language (binary/machine code) 001001 11101 11101 1111111111111000 001000 00001 00000 0000000000001010 001000 00001 00001 0000000000000010 1010

bengalseok91.tistory.com


 

Java Virtual Machine, JVM

Java Runtime Environment, JRE
Java Development Kit, JDK

 

사실 기능은 다르지만 매번 볼때마다 헷갈리는 애들.. 한 번 정리해보려고 한다.

 

 

 

 

 


Compiler vs Interpreter

프로그래밍 언어를 컴퓨터가 이해하고 실행할 수 있는 형태로 변환하는 두 가지 주요한 방식이다. 언어를 어떻게 처리하고 실행하는지에 따라 나뉜다.

  • Compiler
    • 컴파일 과정에서 프로그램의 모든 코드를 분석하고, 한 번에 전체 코드를 기계어로 번환함
    • 컴파일 과정에서 발견되는 오류를 모두 수정해야 실행이 가능함
    • C, C++, Java
  • Interpreter 
    • 소스코드를 한 줄씩 읽고, 각 줄을 즉시 실행 함
    • Python, JavaScript

(Java 기준)Compile이란 ? 

CPU가 해당 명령어(소스코드)를 실행할 수 있도록, 사람이 작성한 고급언어(소스코드)를 바이트코드로 변환시키는 프로세스를 뜻한다. (컴파일 과정 이후에는 JVM을 통해 CPU가 이해할 수 있도록 바이트코드가 기계어로 번환된다.)

*컴퓨터가 코드를 읽는 다는 뜻 = 0과 1로만 작성된 숫자들의 조합을 번역하여 실행하는 것

 

아래와 같은 코드를 작성하였다고 하자. 컴파일 프로세스는 다음과 같다.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

 

 

1. 소스 코드 작성
2. 컴파일 -> .java파일에 작성된 소스코드를 javac(Java Compiler)를 사용하여 컴파일 한다.
3. 컴파일이 완료되면 .java파일이 .class 파일에 바이트코드 형식으로 저장된다.
==== > 컴파일 완료. 이후는 실행 과정
4. JVM위에서 해당 바이트코드가 작성된 .class파일을 기계어로 번역하고 CPU에 의해 실행된다.
5. 기계어대로 명령어가 실행되어 "Hello, World" 라는 문자가 출력된다.

 

 

*바이트코드는 특정 프로그래밍 언어로 작성된 소스 코드를 컴파일한 후의 중간형태의 코드이다. 특정 하드웨어의 기계어가 아니기 때문에 직접적으로 하드웨어에서 실행될 수는 없다 ! But, Java는 JVM이라는 특수한 가상머신 덕에 이 바이트코드를 플랫폼(OS 등)에 비종속적으로 구애받지않고 기계어로 번역할 수 있는 것이다 !(JVM이 바이트코드를 기계어로 번역하는 역할을 함)

 

*CPU가 기계어를 해석하는 과정에서 중요한 사항 -> CPU의 64bit or 32bit. 2의 32승, 2의 64승까지 숫자를 표현할 수 있다는 뜻이며 숫자를 표현한다는 것은 기계가 한번에 그 크기만큼의 데이터를 받아들여 해석할 수 있다는 뜻이다(처리한다).

+ 뭔가 다운로드 받을 때 32bit 혹은 64bit로 나뉘는 경우가 있는데, 이는 해당 소프트웨어가 특정 bit 아키텍쳐에 최적화되도록 설계되어 그런것이다.