본문 바로가기

프로그래밍 언어/Java

Java 실행, 동작 그리고 JVM, JRE, JDK, JIT

JVM(Java Virtual Machine) 은 컴파일된 Java 코드를 실행하는 인터프리터이다. 

 

 

최초 작성된 Java 코드는 .java 파일로 저장된다. 하지만 컴퓨터는 인간의 자연어로 작성된 Java 코드를 실행할 수 없다. 그래서 Java Compiler 는 .java 파일을 컴파일러를 0과 1로 구성된 기계어 어셈블리어로 변환한다. 이렇게 변환된 .java 파일은 Java Byte Code 가 되어 .class 파일로 변환된다. 하지만 기존의 절차 지향 언어였던 C 의 경우 Complier 가 변환한 어셈블리 코드를 CPU 가 수행하는 방식이지만, Java 의 경우에는 이렇게 바뀐 .class 파일을 JVM 이 실행한다. 이렇게 컴파일러가 변환한 어셈블리 코드를 해석하여 수행하는 SW 를 인터프리터라고 한다. 최종적으로 JVM 은 코드를 실행하기 위해 CPU 에게 메모리를 할당받아 코드를 실행하게 된다. 

 

따라서 Java 코드는 JVM 이 실행하기 때문에 운영체제와 상관없이 실행이 가능하다.

 

위 과정에서 일반적인 Compiler 는 모든 코드를 어셈블리 코드로 변환해 인터프리터에게 넘기지만 JIT(Just In Time) Compiler 는 모든 코드를 바꾸는 것이 아닌 실행에 필요한 부분만 변환하여 인터프리터에게 넘긴다. 그래서 이러한 방식의 컴파일러를 동적 컴파일러 라고 부르기도 하며 반대의 경우를 정적 컴파일러라고 부르기도 한다. 

 

또한 JVM 과 각종 파일 형식 정보를 가지고 있는 Java 실행 환경 파일을 JRE(Java Runtime Environment) 라고 하며 자바 코드를 실행하기 위해 필요한 파일이다. 

 

이어서 개발자가 Java 를 개발하기 위한 환경의 여러 정보를 가지고 있는 개발 도구 집합을 JDK(Java Development Kit) 라고 하며 JRE 까지 포함하여 컴파일러까지 가지고 있는 파일이다.

 

따라서 일반적으로 개발자가 Java 개발환경을 세팅할 경우 JDK 가 필요하며 대부분의 개발자가 찾는 OpenJDK 가 바로 무료로 사용 가능한 JDK 이다. (반대로 Java 의 소유권을 가진 Oracle 이 배포하는 최신 JDK 는 Oracle Java 라고 한다)

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

예외처리(Exception)  (0) 2023.02.21
Java 문법 정리  (0) 2023.02.17
객체 지향 프로그래밍, 절차 지향 프로그래밍  (0) 2023.01.12