JVM에 대해 1편에 이어서 2편을 작성해본다.
1편에서는 JVM의 개념이나 정의, 용도 등을 알아보았다면, 이번 2편에서는 JVM의 세 가지 측면에 대해 알아본다.
JVM의 3가지 측면
JVM에는 표준(Specification), 구현(Implementation), 인스턴스(Instance)의 3가지 측면이 있다고 할 수 있다.
표준(Specification)
표준, 즉, 다른 말로는 소프트웨어 사양이다.
여기서 "소프트웨어 사양(스펙)"이란, 어떤 소프트웨어 시스템이 어떻게 동작해야 하는 지를 정의한 인간이 읽을 수 있는 설계 문서이다.
이러한 문서의 목적은 엔지니어들이 이 문서를 보고 코딩할 수 있도록 하는 것이기 때문에 정확한 정의와 요구 사항 등을 기술해야 한다.
JVM의 사양을 보면, 후에 구현할 때 최대한 창조성을 허용하기 위해 JVM 구현 세부 사항이 사양 안에 정의되어 있지 않다.
이른바, "JVM을 올바르게 구현하려면, 클래스(Class) 파일 포맷을 읽고 그 안에 지정된 작업을 제대로 수행하기만 하면 된다."라는 것이다.
음악계의 거장인 요한 세바스찬 바흐가 음악을 창조하는 방법에 대해 말한 것과 비슷하다.
("정확한 시점에 올바른 건반을 누르기만 하면 된다.")
결국 JVM이 하는 일은 자바 프로그램을 정확하게 실행하는 것 뿐이다.
간단해 보이지만, 자바 언어의 능력과 유연성을 고려해보면 이것은 엄청 힘든 일일 것이다.
구현(Implementation)
JVM 사양을 보고 구현하는 것이다.
구현을 하면 실제 소프트웨어 프로그램이 완성되는데 JVM 사양을 보고 구현하면 JVM 구현이 된다.
현재 업계에서는 오픈 소스나 특정 업체 고유의 JVM 구현이 다수 존재한다.
그 중 하나인 오픈 JDK의 핫스팟(HotSpot) JVM은 가장 널리 사용되는 JVM이기도 하다(핫스팟은 참조 구현이며, 세계에서 가장 철저하게 증명된 코드 기반 중 하나이다).
오라클의 라이선스가 부여된 JDK를 포함해, 라이선스가 부여되는 거의 모든 JVM은 오픈JDK와 핫스팟 JVM에서 생겨났다.
일반적으로, 개발자는 JRE(Java Runtime Environment) 번들의 한 부분으로 JVM을 다운로드해 설치한다.
인스턴스(Instance)
JVM 사양이 구현되어 소프트웨어 제품으로 배포가 되면, 그것을 사용하려고 싶은 개발자는 다운로드해서 실행하면 된다.
이렇게 다운로드 된 프로그램이 하나의 JVM 인스턴스(또는 인스턴스화된 버전)이다.
개발자들이 JVM에 대해 말하는 경우, 대부분의 경우에는 소프트웨어 개발 환경 또는 제품화 환경에서 실행되는 하나의 JVM 인스턴스를 지칭한다.
예를 들어,
"헬창아, 그 서버에 있는 JVM은 메모리를 얼마나 먹고 있어?"나
"헬린이가 순환 호출(Circular Call)을 하는 코드를 짜는 바람에 Stack Overflow 에러가 발생해서 JVM이 고장났어.."라고 말할 수 있다.
본래 2편에서 글을 끝낼 예정이었으나, 작성하다 보니 너무 길어져 여기서 자르게 되었다.
다음 글은 JVM의 구성 요소에 대해 알아본다.
끝!
'Study > Java' 카테고리의 다른 글
[Java] JDK란? (0) | 2021.01.01 |
---|---|
[Java] For vs. ForEach (여러 사용법과 속도 차이) (0) | 2020.12.23 |
[Java] JRE란? (0) | 2020.12.21 |
[Java] JVM이란? - (3) 구성 요소 (2) | 2020.12.14 |
[Java] JVM이란? - (1) 개념, 정의, 용도 (0) | 2020.12.10 |