Published on

항해99 플러스 백엔드 코스 6기 언어 사전 스터디 1주차 (1) - JVM

Authors
  • avatar
    Name
    Kil Hyeon Jun
    Twitter

항해99 플러스 백엔드 코스 6기 언어 사전 스터디 1주차 - JVM

소개

항해99 플러스 백엔드 코스 6기를 진행하면서 Java에 대해 리마인드하고자 언어 스터디에 참여했다. 이번 1주차 스터디에서는 Java 실행 환경과 Java Virtual Machine(JVM)에 대해 학습했다.

1. Java 실행 환경

JDK (Java Development Kit)

  • Java 애플리케이션 개발에 필요한 도구들의 모음
  • 컴파일러(javac), 디버거 등 포함
  • JRE를 포함함

JRE (Java Runtime Environment)

  • Java 프로그램 실행에 필요한 최소한의 환경
  • JVM과 Java 클래스 라이브러리 포함

2. 자바 컴파일러 (Java Compiler)

  • 자바 소스 코드(.java 파일)를 바이트 코드(.class 파일)로 변환
  • JDK에 포함된 'javac'가 대표적
  • 컴파일된 바이트 코드는 플랫폼 독립적

3. JVM (Java Virtual Machine)

JVM은 자바 가상 머신으로, 자바 프로그램을 실행하는 런타임 엔진이다. "Write Once, Run Anywhere"라는 자바의 철학을 실현하는 핵심 기술이다.

바이트 코드 (Bytecode)

바이트 코드는 JVM이 이해할 수 있는 중간 언어입니다. 주요 특징은 다음과 같다.

  • 플랫폼 독립적: 어떤 운영 체제에서도 동일한 바이트 코드를 실행할 수 있다.
  • 중간 형태: 소스 코드와 기계어 사이의 중간 형태로, JVM에 의해 최종적으로 기계어로 변환된다.

JVM의 주요 구성요소

JVM은 다음과 같은 주요 구성요소로 이루어져 있다.

  1. 클래스 로더 (Class Loader)
  2. 런타임 데이터 영역 (Runtime Data Areas)
  3. 실행 엔진 (Execution Engine)
  4. 가비지 컬렉터 (Garbage Collector)
  5. 네이티브 인터페이스 (Native Interface)

1. 클래스 로더 (Class Loader)

클래스 로더는 컴파일된 자바 바이트 코드(.class 파일)를 런타임 데이터 영역에 로드하고 링크하는 역할을 한다. 주요 과정은 다음과 같다.

  • 로딩: 클래스 파일을 가져와 JVM의 메모리에 로드
  • 링킹: 클래스 파일을 검증하고, 준비하고, 해석
  • 초기화: 클래스 변수를 적절한 값으로 초기화

2. 런타임 데이터 영역 (Runtime Data Areas)

JVM이 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역이다. 주요 영역은 다음과 같다.

  • 메소드 영역 (Method Area)
  • 힙 영역 (Heap Area)
  • 스택 영역 (Stack Area)
  • PC 레지스터 (PC Register)
  • 네이티브 메소드 스택 (Native Method Stack)

3. 실행 엔진 (Execution Engine)

바이트 코드를 실행하는 런타임 모듈이다. 주요 구성요소는 다음과 같다.

  • 인터프리터: 바이트 코드를 한 줄씩 해석하고 실행
  • JIT 컴파일러: 반복되는 코드를 발견하여 네이티브 코드로 변환
  • 핫스팟 분석기: 자주 실행되는 코드를 감지

4. 가비지 컬렉터 (Garbage Collector)

더 이상 사용되지 않는 객체를 자동으로 메모리에서 제거하는 역할을 한다. 이를 통해 개발자가 명시적으로 메모리 관리를 하지 않아도 되게 한다.

5. 네이티브 인터페이스 (Native Interface)

JNI(Java Native Interface)라고도 불리는 이 컴포넌트는 Java 코드가 네이티브 애플리케이션(예: C, C++ 등으로 작성된 프로그램)과 상호 작용할 수 있게 해주는 프레임워크다. 주요 특징은 다음과 같다.

  • 플랫폼 특정 기능 사용: 운영 체제의 특정 기능을 직접 사용할 수 있게 한다.
  • 성능 향상: 특정 작업에서 Java보다 더 나은 성능을 제공할 수 있다.
  • 레거시 코드 통합: 기존의 C/C++ 라이브러리를 Java 애플리케이션에서 사용할 수 있게 한다.

결론

Java 실행 환경, 컴파일 과정, 그리고 JVM의 구조에 대한 이해는 Java 프로그래밍의 기초 지식이다. 이를 통해 Java 프로그램의 개발부터 실행까지의 전체 과정, 메모리 관리, 그리고 다른 언어와의 상호 작용에 대해 더 깊이 이해할 수 있다.