자바의 특징과 JVM: 자바를 선택한 이유

송성빈·2024년 7월 10일
post-thumbnail

개요

자바는 강력한 기능과 유연성으로 인해 많은 개발자들이 선호하는 프로그래밍 언어이다.
자바의 주요 특징과 자바 프로그램의 실행을 책임지는 Java Virtual Machine(JVM)에 대해 자세히 알아보도록 한다.


자바의 주요 특징

1. 플랫폼 독립성

  • 자바는 "Write Once, Run AnyWhere" 철학을 따른다. 자바로 작성된 프로그램은 JVM 덕분에 다양한 플랫폼에서 실행될 수 있다. 예를 들어, Windows에서 작성된 자바 프로그램은 Mac이나 Linux에서도 동일하게 실행될 수 있다.

2. 객체 지향 프로그래밍 (OOP)

  • 자바는 객체 지향 프로그래밍 언어로, 코드의 재사용성과 유지 보수성을 높혀준다. 클래스, 객체, 상속, 다형성 등 OOP 개념을 통해 코드 구조를 명확하게 정의할 수 있다.

3. 풍부한 표준 라이브러리

  • 자바는 광범위한 표준 라이브러리를 제공하여 다양한 기능을 쉽게 구현할 수 있다. 예를 들어, 파일 입출력, 데이터베이스 연결 등을 표준 라이브러리를 통해 쉽게 처리할 수 있다.

4. 강력한 커뮤니티와 생태계

  • 자바는 오랜 역사를 가진 언어로, 전 세계적으로 많은 개발자 커뮤니터와 방대한 양의 오픈 소스 프로젝트가 존재한다. 이를 통해 다양한 문제에 대한 해결책과 지원을 받을 수 있다.

5. 안전성 및 안정성

  • 자바는 메모리 관리를 자동으로 처리하는 가비지 컬렉터를 통해 메모리 누수를 방지하고, 강력한 예외 처리 메커니즘을 통해 런타임 오류를 효과적으로 관리할 수 있다.

6. 멀티스레딩 지원

  • 자바는 멀티스레딩을 기본적으로 지원하여 병렬 처리가 가능하다. 이는 성능을 높이고, 복잡한 작업을 효율적으로 처리하는 데 도움을 준다.

Java Virtual Machine (JVM)

Java Virtual Machine(JVM)은 자바 프로그램이 실행될 수 있는 런타임 환경을 제공하는 스포트웨어이다. JVM은 자바의 핵심 컴포넌트 중 하나로, 플랫폼 독립성을 실현하는 중요한 역할을 한다.

JVM의 주요 특징

1. 바이트 코드 실행

  • 자바 소스 코드는 .java 파일로 작성된 후, 자바 컴파일러(javac)에 의해 바이트코드인 .class 파일로 변환된다. 이 바이트 코드는 JVM에서 실행된다.

2. 메모리 관리

  • JVM은 메모리 관리를 자동으로 처리한다. JVM의 메모리는 크게 힙(Heap), 스택(Stack)으로 나뉘며, 객체 생성 및 소멸을 포함한 메모리 관리를 가비지 컬렉션(Garbage Collection)을 통해 자동으로 수행한다.

3. 바이트코드 검증

  • JVM은 바이트코드를 실행하기 전에 검증한다. 이는 자바 프로그램이 안전하게 실행되도록 보장하며, 악의적인 코드를 방지한다.

4. 플랫폼 독립성 제공

  • JVM은 특정 운영 체제 및 하드웨어에 종속되지 않고, 동일한 바이트코드를 다양한 플랫폼에서 실행할 수 있게 해준다.

JVM의 구조

JVM은 여러 구성 요소로 이루어져 있으며, 각 구성 요소는 특정 기능을 담당한다.

1. 클래스 로더 (Class Loader)

  • 클래스 로더는 자바 바이트코드(.class 파일)를 메모리로 로드하는 역할을 한다. 이는 동적으로 클래스를 로드하여 프로그램 실행 중에 필요한 클래스를 메모리로 불러온다.

2. 메모리 영역

  • 메서드 영역(Method Area): 클래스, 메서드, 인터페이스 등의 메타데이터와 정적 변수 등이 저장된다.

  • 힙(Heap): 객체와 배열이 저장되는 영역으로, 가비지 컬렉션이 이 영역에서 발생한다.

  • 스택(Stack): 각 스레드마다 존재하며, 메서드 호출 시 프레임을 생성하여 지역 변수와 연산 결과를 저장한다.

3. 실행 엔진 (Excution Engine)

  • 인터프리터(Interpreter): 바이트코드를 한 줄씩 해석하고 실행한다. 초기 실행 속도는 빠르지만, 반복적인 코드 실행 시 비효율적일 수 있다.

  • JIT 컴파일러(Just-In-Time_Compiler): 반복적으로 실행되는 바이트코드를 기계어로 변환하여 캐싱한다. 이로 인해 실행 속도가 크게 향상 된다.

  • 가비지 컬렉터(Garbage Collector): 사용되지 않는 객체를 자동으로 메모리에서 해제하여 메모리 누수를 방지한다.

JVM의 동작 과정

  1. 컴파일 단계: 자바 컴파일러(javac)가 소스 코드(.java 파일)를 바이트코드(.class 파일)로 컴파일한다.

  2. 클래스 로드 단계: 클래스 로더가 바이트코드를 메모리로 로드한다.

  3. 링크 단계: 로드된 클래스들을 링크하고, 메서드 영억에 저장한다.

  4. 실행 단계: 실행 엔진이 바이트코드를 해석(인터프리터)하거나 JIT 컴파일러를 통해 기계어로 변환하여 실행한다.

  5. 메모리 관리: 가비지 컬렉터가 사용되지 않는 객체를 청소한다.

0개의 댓글