본문 바로가기
  • log.info(" Nice Developer ");
Study/Java

[JAVA] JVM의 깊은 개념 및 구조

by kwan97 2023. 6. 9.

# JVM이란?

Java Virtual Machine의 줄임말로 '자바(Java) 언어 실행용 가상 머신'이다.

기본적으로 컴퓨터의 CPU는 Java 소스코드로 작성된 파일(= *.java)을 인식하지 못한다. CPU가 인식하려면 기계어로 컴파일(=번역?) 해줘야 하는데 Java 언어의 특징 중 하나인 'Java는 OS에 종속적이지 않다'는 점을 실현시켜 주는 역할이 바로 JVM이다.

 

즉, Java소스 파일( *.java ) 작성 -> JVM에서 Java파일 컴파일( *.java -> *.class) -> 어느 OS든 JVM 위에서 컴파일된 *.clss파일 실행 가능

*Java compiler
=> *
.java파일을 *.class라는 Java bytecode로 변환해 준다는 뜻이다.
=> JDK를 설치하면 bin에 존재하는 javac.exe를 말한다. (즉, JDK에 Java compiler가 기본 내재)
javac 명령어를 통해 .java를 .class로 컴파일할 수 있다.

# JVM 구성

JVM 구성

JVM은 크게 아래와 같이 이루어져 있다.

  • 클래스 로더(Class Loader)
    • 로딩(Loading)
    • 링크(Linking)
    • initializaion
  • 실행 엔진(Execution Engine)
    • 인터프리터(Interpreter)
    • JIT 컴파일러(Just-in-Time)
    • 가비지 콜렉터(Garbage collector)
  • 런타임 데이터 영역 (Runtime Data Area)

## 클래스 로더(Class Loader)

JVM 내로 클래스 파일(*.class)을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다.
런 타임시 동적으로 클래스를 로드하고 jar 파일 내 저장된 클래스들을 JVM 위에 탑재한다.


즉,  클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크하는 역할을 한다.

## 실행 엔진(Execution)

클래스를 실행시키는 역할이다. 클래스 로더가 JVM내의 런타임 데이터 영역에 바이트 코드를 배치시키고, 이것은 실행 엔진에 의해 실행된다.

 

자바 바이트 코드(*.class)는 기계가 바로 수행할 수 있는 언어보다는 비교적 인간이 보기 편한 형태로 기술된 것이다. 그래서 실행 엔진은 이와 같은 바이트 코드를 실제로 JVM 내부에서 기계가 실행할 수 있는 형태로 변경한다.

 ↳ 인터프리터(Interpreter)

실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행한다.

하지만 한 줄씩 수행하기 때문에 느리다는 단점이 있다.

 ↳ JIT(Just-In-Time)

인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경하고, 이후에는 해당 더 이상 인터프리팅 하지 않고 기계어로 직접 실행하는 방식이다. 자세히

## 가비지 콜렉터

더 이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제함.

728x90

'Study > Java' 카테고리의 다른 글

[JAVA] JAVA 8 버전(1.8.0)에 대하여  (0) 2023.06.16
[JAVA] Class란?  (0) 2022.05.29
[JAVA] 생성자  (0) 2022.05.29
[JAVA] 객체(=Instance) 개념 잡기!  (0) 2022.05.27
[JAVA] 메소드(=Method)에 대하여  (0) 2022.05.27

댓글