Study/Java

[JAVA]JVM 동작원리

짱이08 2023. 9. 10. 23:23

자바언어의 장점은 어떤 환경(OS)에서도 실행 가능하다는 것입니다.

 

그에비해 C언어나 C++ 같은 네이티브 언어들은 각각의 운영체제에 직접 컴파일 되어 실행되기 때문에 특정 운영체제에 종속됩니다.

따라서 운영체제게 맞는 소스코드를 작성하여 컴파일 하여야 합니다.

 

이러한 차이점이 왜 나오는 것일까요?

 

그 이유는 JVM(Java Virtual Machine) 에 있습니다.

JVM은 직역하면 자바언어로 만들어진 프로그램을 실행하는 가상 머신(컴퓨터)입니다.

 

JAVA언어로 작성된 코드는 컴파일러(Javac.exe) 가 바이트 코드로 변환하여 주는데 이 것을 '중간 언어' 라고 합니다.

각각의 운영체제에 맞는 JRE(자바 실행 환경)을 설치 하게 되면 JVM도 자동으로 설치되는데,

컴파일러가 변환시킨 바이트 코드는 JVM이 각자의 운영체제에 맞게 컴파일 해주기 때문에 운영체제에 종속적이지 않습니다.

 

 

여기서 주의해야 할 점은 JAVA 언어는 운영체제에 독립적이지만, JVM 은 운영체제에 독립적이지 않다는 것입니다.

즉, Java 로 작성된 코드는 바이트 코드로 변환되어 어떠한 운영체제에도 영향을 미치지 않지만,

JVM은 각 운영체제에 맞게 바이트 코드를 해석하고 실행시켜야 합니다.


자바프로그램의 실행 과정을 확인해 보겠습니다.

 

  1. 컴파일 : 가장 먼저 컴파일 단계에서는 java로 작성된 소스코드를 바이트코드인 class 소스로 변환 시킵니다.
  2. 클래스 로딩 : 프로그램이 실행되면 JVM내부에 있는 클래스 로더가 JVM내부의 Runtime Data Area로 이동 시킵니다.
  3. 실행 엔진(Excution Engine) : Interpreter와 JIT compiler가 바이트 코드를 해석하고 실행시킵니다.
  4. 실행 : 메모리 할당 및 객체 생성과 메서드가 실행됩니다.
  5. 종료 : main 메서드의 실행이 완료되거나, 다른 종료조건이 충족되면 프로그램이 종료됩니다. JVM은 실행중인 프로세스를 정리하고 메모리를 해제합니다.

이러한 과정은 Java 프로그램이 실행되는 동안 반복되며, 프로그램이 종료될때 까지 지속됩니다.


 

 

참조:

https://velog.io/@livenow/Java-JVM%EC%9D%B4%EB%9E%80

https://techvidvan.com/tutorials/java-virtual-machine/

https://steady-snail.tistory.com/67

https://d2.naver.com/helloworld/1230