[JAVA]JVM 동작원리
자바언어의 장점은 어떤 환경(OS)에서도 실행 가능하다는 것입니다.
그에비해 C언어나 C++ 같은 네이티브 언어들은 각각의 운영체제에 직접 컴파일 되어 실행되기 때문에 특정 운영체제에 종속됩니다.
따라서 운영체제게 맞는 소스코드를 작성하여 컴파일 하여야 합니다.
이러한 차이점이 왜 나오는 것일까요?
그 이유는 JVM(Java Virtual Machine) 에 있습니다.
JVM은 직역하면 자바언어로 만들어진 프로그램을 실행하는 가상 머신(컴퓨터)입니다.
JAVA언어로 작성된 코드는 컴파일러(Javac.exe) 가 바이트 코드로 변환하여 주는데 이 것을 '중간 언어' 라고 합니다.
각각의 운영체제에 맞는 JRE(자바 실행 환경)을 설치 하게 되면 JVM도 자동으로 설치되는데,
컴파일러가 변환시킨 바이트 코드는 JVM이 각자의 운영체제에 맞게 컴파일 해주기 때문에 운영체제에 종속적이지 않습니다.
여기서 주의해야 할 점은 JAVA 언어는 운영체제에 독립적이지만, JVM 은 운영체제에 독립적이지 않다는 것입니다.
즉, Java 로 작성된 코드는 바이트 코드로 변환되어 어떠한 운영체제에도 영향을 미치지 않지만,
JVM은 각 운영체제에 맞게 바이트 코드를 해석하고 실행시켜야 합니다.
자바프로그램의 실행 과정을 확인해 보겠습니다.
- 컴파일 : 가장 먼저 컴파일 단계에서는 java로 작성된 소스코드를 바이트코드인 class 소스로 변환 시킵니다.
- 클래스 로딩 : 프로그램이 실행되면 JVM내부에 있는 클래스 로더가 JVM내부의 Runtime Data Area로 이동 시킵니다.
- 실행 엔진(Excution Engine) : Interpreter와 JIT compiler가 바이트 코드를 해석하고 실행시킵니다.
- 실행 : 메모리 할당 및 객체 생성과 메서드가 실행됩니다.
- 종료 : 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