JVM(Java Virtual Machine)은 중요한 구성 요소중의 하나다. JVM은 Java 코드를 실행하고 Java 애플리케이션을 위한 플랫폼 독립적인 런타임 환경을 제공하고 다양한 장치 및 플랫폼에서 일관된 동작을 보장하고 메모리 관리 및 보안 기능을 제공한다.
JVM은 컴파일된 Java 코드를 해석하고, 메모리를 관리하고, Java의 액세스 제한을 적용하여 보안을 제공하는 역할을 한다.
JVM의 주요 이점 중 하나는 플랫폼 독립성이다. Java 코드는 JVM이 있는 모든 장치에서 실행할 수 있는 바이트코드라는 기계 독립적 형식으로 컴파일됩니다. 이를 통해 다양한 장치 및 플랫폼에서 실행할 수 있다.
JVM은 표준 런타임 환경을 제공하여 다양한 장치 및 플랫폼에서 일관되게 작동 가능하도록 한다. 이를 통해 개발자는 Java 애플리케이션을 더 쉽게 작성하고 배포할 수 있다.
JVM은 Java 뿐만아니라 Scala 및 Kotlin과 같은 다른 프로그래밍 언어도 지원한다.
가비지 콜렉터(Garbage Collector)란?
가비지 콜렉터는 자바에서 사용하지 않는 객체들을 메모리에서 자동으로 제거하는 기능이다. 가비지 콜렉터는 JVM (Java Virtual Machine)의 일부로서 메모리 관리를 담당합니다.
가비지 콜렉터의 동작 과정
가비지 콜렉터는 우선 루트 (Root) 객체들을 찾습니다. 루트 객체란 스택이나 정적 영역에 있는 객체들로서 직접 접근할 수 있는 객체들을 뜻한다.
가비지 콜렉터는 루트 객체들로부터 참조되는 모든 객체들을 추적한다. 이때 추적된 객체들은 살아있는 (Live) 객체라고 한다.
가비지 콜렉터는 살아있는 객체가 아닌 나머지 객체들을 가비지 (Garbage) 라고 판단하고 메모리에서 제거한다.
가비지 콜렉터의 종류와 특징
Serial GC: 단일 스레드로 작동하는 가장 기본적인 가비지 콜렉터, 메모리가 작고 CPU 코어 수가 적은 시스템에 유용하다.
Parallel GC: 여러 스레드로 작동하는 가비지 콜렉터, 메모리가 크고 CPU 코어 수가 많은 시스템에 유용하다.
CMS (Concurrent Mark Sweep) GC: 병렬적으로 작동하면서 애플리케이션의 멈춤 시간을 최소화하는 가비지 콜렉터, 응답성이 중요한 애플리케이션에 유용하다.
G1 (Garbage First) GC: 메모리를 여러 영역으로 나누고 우선순위에 따라 영역별로 수집하는 가비지 콜렉터, 대용량의 메모리와 고성능의 애플리케이션에 유용하다.
JIT 컴파일러란?
JIT(Just-In-Time) 컴파일러는 사전이 아닌 필요에 따라 런타임에 코드를 컴파일하는 컴파일러 유형이다. JIT 컴파일러는 Java 코드 실행을 담당하는 JVM(Java Virtual Machine)의 구성 요소입니다.
JIT 컴파일러의 특징
JIT 컴파일러는 런타임 시 코드를 컴파일하여 Java 애플리케이션의 성능을 향상시키는 역할을 하는 JVM의 중요한 구성 요소입니다. 자주 사용되는 코드를 기계 코드로 컴파일함으로써 JIT 컴파일러는 특정 런타임 조건 및 사용 패턴에 맞게 코드를 최적화하여 성능을 개선하고 실행 시간을 단축한다.
JVM은 컴파일되지 않은 코드 조각을 발견하면 즉시 컴파일하고 컴파일된 코드를 메모리에 캐시한다. 동일한 코드가 다시 실행될 때 JIT 컴파일러는 캐시된 컴파일된 코드를 다시 컴파일하지 않고 사용할 수 있으므로 애플리케이션의 성능이 향상된다.