자바 프로그램의 실행 과정
자바로 작성된 프로그램은 다음과 같은 순서로 실행됩니다.
자바 컴파일러(Java compiler)
자바 바이트 코드(Java bytecode)
자바 가상 머신(JVM)
위의 그림처럼 서로 다른 운영체제라도 자바 가상 머신만 설치되어 있다면, 같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있습니다.
따라서 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있습니다.
단, 자바 프로그램과는 달리 자바 가상 머신(JVM)은 운영체제에 종속적이므로, 각 운영체제에 맞는 자바 가상 머신을 설치해야 합니다.
또한, 자바 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로, 상대적으로 실행 속도가 느리다는 단점을 가지고 있습니다.
자바 가상 머신의 구성
자바 가상 머신(JVM)은 다음과 같이 구성됩니다.
1. 자바 인터프리터(interpreter)
2. 클래스 로더(class loader)
3. JIT 컴파일러(Just-In-Time compiler)
4. 가비지 컬렉터(garbage collector)
자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것이 자바 인터프리터(interpreter)입니다.
자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결됩니다.
이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더(class loader)입니다.
JIT 컴파일러(Just-In-Time compiler)란 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러를 의미합니다.
동적 번역(dynamic translation)이라고도 불리는 이 기법은 프로그램의 실행 속도를 향상시키기 위해 개발되었습니다.
즉, JIT 컴파일러는 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는 데 사용합니다.
자바 가상 머신은 가비지 컬렉터(garbage collector)를 이용하여 더는 사용하지 않는 메모리를 자동으로 회수해 줍니다.
따라서 개발자가 따로 메모리를 관리하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와줍니다.
이 중 바이트코드(ByteCode)란?
JVM이 사용자가 작성한 .java 소스 코드 파일을 운영체제에 실행가능한 명령어 집합 파일로 컴파일하는 과정 중에 필요한 코드.
1차적으로 .java 소스 코드파일을 사용자가 작성하면, JVM이 이를 바이트코드로 컴파일하여 .class 파일로 만든다.
2차적으로 운영체제에 작용하는 기계어로 한번 더 컴파일되어 컴퓨터에 JAVA 프로그램이 실행되는 것이다.
바이트코드는 자바 원시언어 문장을 포함하고 있는 파일을 컴파일하면 그 결과물을 얻게되는 것이다.
컴파일된 자바코드, 즉 바이트코드는 한번에 한 문장씩 컴퓨터 내에서 실행된다는 측면에서는 실핼할 준비가 된 프로그램 모듈과 비슷하지만 그러니 바이트코드 명령어들은 논리적이고 추상적 기계인 자바 가상머신(JVM)에 보내는 실제 명령어들이다.
바이트코드는 한번에 한 문장씩 번역되는 형식 외에, 어떤 특정한 시스템 플렛폼에 맞게 JIT 컴파일러에 의해 다시 컴파일 될 수 있는데 이렇게 하면 자바프로그램의 실행이 더 빨라진다.
바이트코드는 보통 CLASS라는 확장자를 갖는 바이너리 파일 속에 담겨진다.
[JAVA] 라이브러리와 JAR파일 이란? (0) | 2020.05.13 |
---|---|
[JAVA] JAVA관련 상식 CGI와 서블릿 그리고 톰캣 (0) | 2020.05.13 |
[JAVA] JAVA관련 기본상식 J2EE, JDK, JRE, J2SE 차이 (0) | 2020.05.13 |
[JAVA] static 개념 (0) | 2020.05.04 |
프레임워크란 ? (0) | 2020.05.04 |