본문 바로가기
Programming Language/Java

[Java] 자바 프로그램의 실행 구조와 자바 가상머신

by 리버🐦‍🔥 2023. 10. 21.

자바 프로그램 실행 구조와 동작 원리

일반적으로 프로그램은 운영체제(Windows, Linux 등..)위에 올려져서 실행된다.

<일반적인 프로그램 실행구조>

위 그림처럼 하드웨어 위에 어떤 OS가 올라가느냐에 따라서 프로그램을 정상적으로 실행할 수 있는지에 대한 여부가 나뉘는게 일반적인 프로그램 실행구조이다.

그러나 자바는 OS에 따라 프로그램의 실행 가능 여부 문제를 해결하고자 Java Virtual Machine(JVM)이라는 개념을 도입한다.

JVM(Java Virtual Machine - 자바 가상머신)이란?

  • Java Virtual Machine : 자바 프로그램을 실행할 때 운영체제에 따른 차이점을 대신 처리해주는 가상 머신

앞서 나온 내용과 같이 기존의 프로그램 실행 구조는 OS에 따라서 프로그램을 각자 다르게 구성해야된다는 단점이 있었다. 즉, 10개의 OS가 있으면, 10개의 프로그램이 필요하다는 말이다. 이러한 문제점을 해결하기 위해 각기 다른 OS에 대해서도 하나의 프로그램으로 대응하기 위해 JVM(Java Virtual Machine)이 등장하게 된다.

<자바 프로그램 실행구조>

일반적인 프로그램 실행 구조에서 OS와 프로그램 사이에 자바 가상머신이 추가되었다. OS와 프로그램 사이에서 사용되며 하나의 프로그램으로 각기 다른 OS에서 실행시킬 수 있게끔 도와주는 것이 바로 JVM이다.

<다양한 OS위에서 JVM을 활용한 프로그램 실행 예시>

위 사진과 같이 각기 다른 OS에 대응하는 JVM이 존재하고, 하나의 Java 프로그램을 다양한 JVM을 통해 여러 OS위에서 동작하게 한다.

이처럼 JVM을 활용하면 OS의 숫자에 비례해서 프로그램을 개발할 필요가 없고, 하나의 프로그램으로 여러 OS에서 프로그램을 동작시킬 수 있다. (그러나 여러 개의 JVM 개발은 반드시 필요하다.)

자바 컴파일러와 자바 바이트 코드

  • 자바 컴파일러 : 자바 프로그램을 JVM이 이해할 수 있는 코드(자바 바이트코드)로 생성해내는 프로그램
  • 자바 바이트코드 : JVM이 이해할 수 있도록 자바 컴파일러에 의해 생성되는 명령어의 크기가 1Byte인 코드
  • 자바 런처 : 자바 가상머신을 구동시키고, 그 위에서 프로그램이 실행되도록 돕는 프로그램

<자바 소스코드를 자연어로 바꾸는 과정>

자바 소스코드는 JVM에서 실행되기 전에 “자바 바이트코드(Java bytecode)”라는 형태로 “자바 컴파일러(Java Compiler)”에 의해 변경된다. 이 때, javac.exe라는 이름으로 생성되는 실행파일이 자바 컴파일러이다.

<자바 소스코드가 OS위에서 돌아가는 데까지의 순서>

다시 순서를 정리해보자면, 소스 프로그램(ex. soruceProgram.java)이 자바 컴파일러(javac.exe)를 통해 바이트코드로 컴파일되고, 이 바이트코드를 자바 런쳐(java.exe)를 통해 JVM위에서 실행시킨다.