백/Java

[Java] JVM의 개념과 구조

연지양갱 2023. 11. 10. 10:21
728x90
반응형
SMALL

출처 : https://cheershennah.tistory.com/222

JVM이란?

JVM (Java Virtual Machine)은 자바 바이트 코드(.class 파일 형태의 중간 코드)를 실행하기 위한 가상 머신입니다.

 

 

 

JVM의 구조

JVM의 구조는 크게 3가지 컴포넌트로 나뉩니다.

클래스 로더, 런타임 데이터 영역, 실행 엔진으로 나뉘어집니다.

 

클래스 로더

클래스 로더는 JVM이 시작될 때 필요한 .class 파일들을 메모리에 로드하는 역할을 합니다.

Loading, Linking, Initializtion 세단계로 이루어집니다.

  1. Loading : .class 파일들을 바이트 코드로 읽어와 메모리에 적재합니다.
  2. Linking : 검증, 준비, 해석 등의 과정을 통해 바이트 코드가 올바른지 확인하고 정적 변수에 메모리를 할당합니다.
  3. Initialization : 모든 정적 변수를 해당 값으로 초기화합니다.

 

자세한 내용은 아래 포스팅 내용을 확인해주세요 

https://steady-coding.tistory.com/593

 

[Java] JVM의 클래스 로더란?

java-study에서 스터디를 진행하고 있습니다. 클래스 로더란? 자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임(바이트 코드를 실행할 때)에 클래스 로드하고 링크하는 특징이 있다. 이 동적 로드

steady-coding.tistory.com

 

 

 

 

런타임 데이터 영역(Runtime Data Area)

프로그램 실행 중 생성되는 데이터를 저장하는 부분으로 다음과 같은 여러 서브 컴포넌트로 구성되어 있스빈다.

  1. Method Area : 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드와 변수)를 저장하는 공간입니다.
  2. Heap Area : 객체와 배열이 생성되는 영역입니다. 가비지 컬렉터가 관리하는 주요 영역입니다.
  3. Stack Area : 각 스레드에 대한 별도의 런타임 스택을 만듭니다. 이곳에서 메소드 호출과 로컬 변수 등의 정보가 관리됩니다.
  4. PC Registers(Program Counter Registers) : 현재 스레드가 실행되는 명령의 주소를 저장합니다.
  5. Native Method Stacks : Java 외부(Native) 메소드에 대한 정보를 관리합니다.

 

자세한 내용은 아래 포스팅 내용을 확인해주세요

https://kkang-joo.tistory.com/18

 

[JAVA] JVM 메모리 구조, 데이터 영역 ( Runtime Data Areas)

JVM의 구성요소 중, 데이터 영역에 대한 설명으로 아래의 내용들에 대해서 다루어 보도록 하겠다 Runtime Data Areas란 Runtime Data Areas의 구성 요소 스레드 별로 존재 PC Register JVM Stack Native Method Stack 스

kkang-joo.tistory.com

 

 

 

 

실행 엔진(Execution Engine)

바이트 코드를 실제 기계어로 변환하여 명령어들을 실행합니다.

이과정에서 인터프리터와 JIT(Just-In-Time) 컴파일러 방식을 사용할 수 있습니다.

  1. 인터프리터 방식은 한번에 한줄씩 바이트 코드를 해석하고 실행하지만 비교적 느립니다.
  2. JIT컴파일러는 반복적인 코드 패턴을 발견하면 해당 부분을 네이티브 코드로 컴파일하고 캐시에 저장하여 성능을 향상시킵니다.

 

자세한 내용은 아래 포스팅 내용을 확인해주세요

https://junhyunny.github.io/information/java/jvm-execution-engine/

 

JVM 실행 엔진(Execution Engine)

<br /><br />

junhyunny.github.io

 

 

저는 좀 급해서 위 포스팅 내용을 읽어보고 이해했습니다...ㅎㅎ

 

 

 

 

 

 

JVM의 특징

1. 플랫폼 독립성

JVM은 다양한 하드웨어와 운영체제 환경에서 동일하게 작동합니다.

따라서 한 번 작성된 자바 애플리케이션은 "Write Once, Run Anywhere" 원칙에 따라 여러 플랫폼에서 실행될 수 있습니다.

 

 

2. 메모리 관리 및 최적화

JVM은 가비지 컬렉터를 사용하여 메모리를 자동으로 관리합니다.

또한 JIT(Just-In-Time) 컴파일러를 사용하여 자주 사용되는 바이트 코드를 네이티브 코드로 변환하여 성능을 최적화합니다.

 

 

3. 보안 

JVM은 클래스 로더(class loader)와 바이트 코드 검증기(bytecode verifier)를 통해 애플리케이션의 보안을 유지합니다. 

이는 악의적인 코드나 적절하지 않은 작업을 차단하여 시스템의 안전성을 보장합니다.

 

 

4. 다양한 언어 지원

JVM은 자바뿐만 아니라 Kotlin, Groovy, Scala 등 다른 프로그래밍 언어도 지원합니다.

이러한 언어로 작성된 코드도 JVM위에서 바이트코드로 실행될 수 있습니다.

 

 

JVM은 자바 네이티브 인터페이스(Java Native Interface, JNI)를 제공하여 Java 코드가 C, C++ 등의 다른 언어로 작성된 함수와 상호작용할 수 있게 해줍니다.

또한 가비지 컬렉터(Garbage Collector)가 메모리 관리를 담당하여 개발자가 직접 메모리를 해제할 필요가 없습니다.

 

반응형