JVM : Java Virtual Machine (자바 가상 머신)
- 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다.
- Java Byte Code를 OS(Operating System : 운영체제)에 맞게 해석, 실행될 수 있는 런타임 환경을 제공해주는 규격.
- JVM은 많은 하드웨어와 소프트웨어 플랫폼에 이용 가능하다.
- 운영체제 독립적으로 동작하기 위해 필요
- 컴파일된 바이트 코드를 실행하기 위한 가상의 머신
< 역할 >
* Loads code : 작성된 소스코드를 로드(Load : 읽기)
* Verifies code : 소스코드 검증 및 확인 ( 문법에 올바른지 검증하여 정상적으로 동작하는지 확인한다.)
* Executes code : 소스코드 실행(실제 머신에서 소스코드를 실행해 프로그램을 구동한다.)
* Provides runtime environment : 런타임 환경을 제공(어떠한 장비에서건 구동이 되기 위해 기본 베이스 환경을 구축시켜 준다)
< 자바 프로그램의 실행 과정 >
자바로 작성된 프로그램은 다음과 같은 순서로 실행됩니다.
자바 컴파일러(Java compiler)
자바 컴파일러는 자바를 가지고 작성한 자바 소스 코드를 자바 가상 머신이 이해할 수 있는 자바 바이트 코드로 변환합니다.
자바 컴파일러는 자바를 설치하면 javac.exe라는 실행 파일 형태로 설치됩니다.
자바 바이트 코드(Java bytecode)
자바 바이트 코드(Java bytecode)란 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다.
자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있습니다.
이러한 자바 바이트 코드의 확장자는 .class입니다.
자바 바이트 코드는 자바 가상 머신만 설치되어 있으면, 어떤 운영체제에서라도 실행될 수 있습니다.
자바 가상 머신(JVM)
자바 가상 머신(JVM, Java Virtual Machine)이란 자바 바이트 코드를 실행시키기 위한 가상의 기계라고 할 수 있습니다.
자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 합니다.
따라서 오라클은 대부분의 주요 운영체제뿐만 아니라 웹 브라우저, 스마트 폰, 가전기기 등에서도 자바 가상 머신을 손쉽게 설치할 수 있도록 지원하고 있습니다.
위의 그림처럼 서로 다른 운영체제라도 자바 가상 머신만 설치되어 있다면, 같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있습니다.
따라서 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있습니다.
단, 자바 프로그램과는 달리 자바 가상 머신(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)를 이용하여 더는 사용하지 않는 메모리를 자동으로 회수해 줍니다.
따라서 개발자가 따로 메모리를 관리하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와줍니다.
'JAVA 공부 > JAVA 상식&의존성' 카테고리의 다른 글
[자바 상식] CGI와 서블릿 그리고 톰캣 (0) | 2020.05.13 |
---|---|
[자바 상식] J2EE, JDK, JRE, J2SE 차이 (0) | 2020.05.13 |
[자바 의존성] 프레임워크와 자바 웹개발 관련 프레임워크 (0) | 2020.05.13 |
[자바의 의존성] 의존성과 라이브러리, 그리고 jar (0) | 2020.05.13 |
[자바의 의존성] 메이븐과 의존성 관리도구 (0) | 2020.05.13 |
댓글