데이터를 위한 Back_End 공부하기 : Java의 JVM(Java Virtual Machine)

post-thumbnail

데이터를 위한 Back_End 공부하기 : Java의 JVM(Java Virtual Machine)

▽ 데이터를 위한 Back_End 공부하기 : Java의 JVM(Java Virtual Machine)

목  차

1. JVM의 정의 및 역할
2. JVM의 구성 요소
3. JVM의 특징
4. JVM의 동작 과정.

1. JVM의 정의 및 역할.


JVM은 Java Virtual Machine의 약자로,

  • 자바 바이트코드를 실행할 수 있는 가상 머신입니다.

  • 이는 자바 애플리케이션과 운영 체제 사이에서 중개자 역할을 하며,
    자바 코드를 컴파일하여 생성된 바이트코드를 해석하고 실행합니다.

  • JVM의 주요 역할은 플랫폼 독립성을 제공하여, 자바 프로그램이 다양한 운영 체제와 하드웨어에서 동일하게 실행될 수 있도록 지원하는 것입니다

2. JVM의 구성 요소.


  • JVM은 여러 가지 구성 요소로 이루어져 있으며, 각 요소는 특정한 역할을 수행합니다.

클래스 로더 시스템(Class Loader System):

  • 정의:
    클래스 파일을 로드하고, 런타임 데이터 영역에 배치합니다.

  • 역할:
    동적으로 클래스를 로드하며, 보안을 위한 검증도 수행합니다.

  • 종류:
    부트스트랩 클래스 로더, 확장 클래스 로더, 시스템 클래스 로더, 사용자 정의 클래스 로더 등이 있습니다.

런타임 데이터 영역(Run-time Data Area):

  • 메소드 영역(Method Area):
    클래스의 메소드와 변수 정보를 저장합니다.

  • 힙 영역(Heap Area):
    객체를 저장하는 영역으로, 가비지 컬렉터에 의해 관리됩니다.

  • 스택 영역(Stack Area):
    쓰레드가 실행 중인 메소드의 호출 정보를 저장합니다.

  • PC 레지스터 영역(PC Register):
    현재 실행 중인 명령어의 주소를 저장합니다.

  • 네이티브 메소드 스택(Native Method Stack):
    네이티브 메소드의 호출 정보를 저장합니다.

실행 엔진(Execution Engine):

  • 인터프리터(Interpreter):
    바이트코드를 한 줄씩 실행합니다.

  • JIT(Just-In-Time) 컴파일러:
    자주 실행되는 코드를 기계어로 컴파일하여 성능을 향상시킵니다.

  • AOT(Ahead-Of-Time) 컴파일러:
    런타임 전에 코드를 기계어로 컴파일합니다.

  • GraalVM:
    IT 컴파일러의 한 종류로, 더 빠른 성능과 낮은 메모리 사용을 제공합니다.

가비지 컬렉터(Garbage Collector):

  • 정의:
    힙 영역에 할당된 객체 중 사용되지 않는 것을 자동으로 제거하여 메모리를 관리합니다.

  • 종류:
    세대별 가비지 컬렉션, 마크 앤 스위프, 병렬 가비지 컬렉션 등이 있습니다

3. JVM의 특징.


플랫폼 독립성:

  • JVM 덕분에 자바 프로그램은 운영 체제나 하드웨어에 구애받지 않고 실행될 수 있습니다.

메모리 관리:

  • 가비지 컬렉션을 통해 자동으로 메모리를 관리합니다.

스택 기반 가상 머신:

  • 효율적인 메모리 관리를 위해 스택 기반으로 설계되었습니다.

다중 쓰레드 지원:

  • 여러 쓰레드를 동시에 실행할 수 있어 시스템 자원을 효율적으로 사용할 수 있습니다

4. JVM의 동작 과정.


1. 컴파일:

  • 자바 소스 코드를 컴파일러(javac)를 통해 바이트 코드(.class)로 변환합니다.

2. 클래스 로딩:

  • 클래스 로더가 바이트 코드를 읽어 메모리에 로드합니다. 이 과정은 로딩, 링크, 초기화로 나뉩니다.

    • 로딩 (Loading): 클래스 파일을 읽고 메소드 영역에 저장합니다.

    • 링크 (Linking): Verify, Prepare, Resolve 단계로 나뉩니다.

    • 초기화 (Initialization): static 변수를 초기화합니다.

3. 바이트 코드 해석 및 실행:

  • 실행 엔진이 바이트 코드를 해석하고 실행합니다. 이는 인터프리터나 JIT 컴파일러를 통해 수행됩니다.

4. 가비지 컬렉션:

  • 사용되지 않는 객체를 메모리에서 제거하여 메모리를 관리합니다.

5. 예외 처리 및 프로그램 종료:

  • 프로그램이 종료되면 JVM도 종료됩니다

0개의 댓글