티스토리 뷰
많은 분산 처리 프레임워크들이 JVM 위에서 돌아간다.
하지만 자바는 익숙치 않아서 앞으로 JVM에 대해 조금 공부해볼까 한다.
JVM 탄생 배경
Java는 원래 다양한 가전제품의 임베디드 시스템에서 실행될 소프트웨어를 개발하기 위한 목적으로 시작되었다. 이러한 특성상, 다양한 하드웨어와 운영체제에서 실행될 수 있는 호환성이 필요했다.
하지만 C/C++의 경우 운영체제나 CPU 아키텍처에 따라 각각 빌드해야 하고, 아예 코드를 따로 작성해야 되는 경우도 있다.
그래서 Java는 한번 개발하면 어디서든 실행 가능하도록(Write Once, Run Anywhere) 설계되었다.
Java 프로그램은 운영체제나 하드웨어에 독립적인 JVM이라는 실행 환경에서 이루어지기 때문에 다양한 환경에서도 별도의 수정 없이 실행될 수 있다.
JVM 개념
JVM(Java Virtual Machine)은 Java 프로그램이 실행될 수 있도록 만들어진 가상화된 실행 환경이다. 운영체제와 상관없이 Java 프로그램을 실행할 수 있도록 바이트코드를 해석하고 실행하는 역할을 한다.
보통의 C/C++ 프로그램은 컴파일된 후 운영체제 위에서 직접 실행되지만 Java 프로그램은 먼저 컴파일되어 바이트코드(.class)로 변환되고, JVM이 이를 운영체제가 실행가능한 코드(Native code)로 변환하여 실행한다. 이 과정에서 JVM은 인터프리터와 JIT(Just-In-Time) 컴파일러를 함께 사용하여 성능을 최적화한다.
뿐만 아니라 JVM은 메모리 관리, 가비지 컬렉션 등의 기능을 제공하여 프로그램이 안정적으로 동작할 수 있도록 한다.
현재 가장 널리 사용되는 JVM 구현체는 핫스팟 JVM으로 실행 중 자주 사용되는 코드(Hot-spot)를 감지하고 최적화하는 방식으로 성능을 향상시킨다. 핫스팟이라는 이름도 여기서 유래했다.
최근에는 그랄VM이라는 좀 더 최적화되고 더 많은 프로그래밍 언어를 지원하는 JVM 기술이 주목받고 있는 듯 하다.
JRE? JDK?
우리는 이러한 JVM을 단독으로 만나볼 순 없고 JRE나 JDK 형태로 사용할 수 있다.
JRE는 Java Runtime Environment. Java 프로그램의 실행을 목적으로 하며 JVM과 표준 라이브러리들 포함한다.
JDK는 Java Development Kit. Java 프로그램 개발을 목적으로 하며 JRE와 컴파일러, 디버거 등이 포함된다.
실행을 위해서는 JRE, 개발을 위해서는 JDK라는 것만 기억하면 되겠다.
---
JVM은 자바스크립트로 치면 Node.js 같은 런타임이라고 이해하면 될 것 같다.
프로그램 외에 추가적인 런타임 프로세스/스레드가 백그라운드에서 돌면서 여러가지 최적화를 도와주는 것이다.
이후 포스팅에서는 JVM 내부 동작을 하나씩 공부해보자.
- Total
- Today
- Yesterday