JVM(Java Virtual Machine)이 뭐야?

현정재·2024년 6월 23일
0

JVM(Java Virtual Machine)

JVM이란?

JVM은 자바 프로그램을 실행하기 위해 필요한 가상 컴퓨터입니다. 실제 하드웨어가 아닌 소프트웨어로 구현된 컴퓨터를 의미합니다. 운영 체제 위에서 자바를 실행시킬 무언가가 필요하며, 그게 바로 JVM입니다. OS에 종속받지 않고 CPU가 자바를 인식하고 실행할 수 있게 합니다.

JVM의 주요 기능

  • 바이트코드 실행: 자바 소스 코드는 먼저 바이트코드로 컴파일됩니다. JVM은 이 바이트코드를 읽고 실행합니다.
    • 바이트코드란? 고급 언어로 작성된 소스 코드를 가상 머신이 이해할 수 있는 중간 코드로 컴파일한 것을 말합니다.
  • 메모리 관리: JVM은 메모리 할당 및 해제를 자동으로 처리합니다. 가비지 컬렉터(Garbage Collector)는 사용되지 않는 객체를 메모리에서 제거하여 메모리를 효율적으로 관리합니다.
  • 플랫폼 독립성: JVM은 운영 체제에 종속되지 않기 때문에, 다양한 플랫폼에서 자바 프로그램을 동일하게 실행할 수 있습니다.

자바 프로그램 실행 과정

  1. 자바 소스 코드 작성: .java 파일에 자바 소스 코드를 작성합니다.
  2. 컴파일: 자바 컴파일러(javac)를 사용하여 자바 소스코드를 바이트코드(.class 파일)로 컴파일합니다.
  3. 실행: JVM이 바이트코드를 로드하여 실행합니다.

JVM 구조

JVM은 여러 컴포넌트로 구성되어 있습니다.

1. 클래스 로더 시스템

  • 자바 클래스 파일을 로드하는 역할을 합니다. 자바 클래스 파일은 하드 드라이브나 네트워크에서 로드될 수 있습니다.

2. 런타임 데이터 영역

  • 메소드 영역: 클래스의 메타데이터, 정적 변수, 그리고 메소드 바이트코드를 저장합니다.
  • 힙 영역: 객체와 배열을 저장하고 모든 스레드가 공유합니다.
  • 스택 영역: 각 스레드마다 별도의 스택을 가지고 있으며, 메소드 호출 시 생성되는 프레임을 저장합니다.
  • PC 레지스터: 각 스레드마다 현재 실행 중인 명령의 주소를 저장합니다.
  • 네이티브 메소드 스택: 자바가 아닌 네이티브 코드를 실행할 때 사용됩니다.

3. 실행 엔진

  • 인터프리터: 바이트코드를 한 줄씩 읽고 실행합니다.
  • JIT (Just-In-Time) 컴파일러: 성능을 높이기 위해 자주 사용되는 바이트코드를 네이티브 코드로 변환합니다.
  • 가비지 컬렉터(Garbage Collector): 사용되지 않는 객체를 자동으로 제거하여 메모리를 관리합니다.

전체적인 과정

  1. 소스 코드 작성: 자바 소스 코드를 .java 파일에 작성합니다.
  2. 컴파일: 자바 컴파일러 javac를 사용하여 소스 코드를 바이트코드(.class 파일)로 변환합니다.
  3. 클래스 로딩: JVM의 클래스 로더가 바이트코드를 메모리에 로드합니다.
  4. 바이트코드 실행: JVM의 실행 엔진이 바이트코드를 인터프리터 또는 JIT 컴파일러로 실행합니다.
  5. 메모리 관리: JVM의 가비지 컬렉터가 메모리에서 사용되지 않는 객체를 정리합니다.
profile
wonttock

0개의 댓글