자바언어로 프로그래밍을 처음 공부했을 때 접했던 주제이지만, 시간이 지나면서 까먹게 되었다. 그 뒤로 자바 언어의 실행 원리에 대해 인지 하지 못한 채 프로그래밍을 해왔다. 물론 실행의 원리를 모른다고 해서 개발을 못하는 것이 아니지만 문득 자바라는 언어의 실행 원리가 궁금해서 책을 찾아보게 되었다.
자바 프로그램의 실행 구조와 자바 가상머신
아래는 일반적인 프로그램의 실행 구조이다.
Program |
Operating System |
Hardware |
하드웨어 기반으로 운영체제가 동작하고, 그 위에서 프로그램의 실행되는 구조이다.
아래는 자바 프로그램의 실행 구조이다.
Program |
Java Virtual Machine |
Operating System |
Hardware |
하드웨어 기반으로 운영체제가 동작하고, 운영체제는 자바 가상머신을 실행시키고, 자바 가상머신이 프로그램을 실행시키는 구조이다. 자바 가상머신도 운영체제 위에서 동작하는 일종의 소프트웨어에 불과하다.
그렇다면 자바 가상 머신을 사용하는 이유가 무엇일까?
프로그램은 본래 운영체제에 따라 구현 방법이 달라진다. 따라서 동일한 기능의 프로그램이라고 할지라도 윈도우 또는 리눅스에서 동작을 시키려면 두 개의 프로그램을 별도로 작성해야 한다.
하지만 이러한 문제점을 자바 가상 머신이 해결해준다. 자바 가상 머신이 프로그램을 실행시키기 때문에 이러한 운영체제 별로 존재하는 차이점을 자바 가상 머신이 중간에서 해결한다.
Java Program |
Windows JVM |
Windows Os |
Hardware |
위, 아래 그림에서 나타났듯이 운영체제에 따라 자바 프로그램을 실행시키는 자바 가상 머신이 다르다.
Java Program |
Linux JVM |
Linux Os |
Hardware |
자바 컴파일러와 자바 바이트코드
자바 컴파일러는 자바 가상머신이 이해할 수 있는 코드를 생성해낸다.
자바 컴파일러는 소스파일에 저장된 소스코드를 자바 가상 머신이 이해할 수 있는 자바 바이트코드로 변환하는 역할을 가지고 있다. 이 바이트 코드는 우리가 아는 확장자가 class인 클래스 파일에 담긴다.