본문 바로가기

Java

JVM (Java Virtual Machine) 정리

JVM은 말 그대로 자바를 실행하기 위한 가상 기계이다.

OS에 의존하지 않도록 하기 위해 만들어졌다.

출처 : https://stepbystep1.tistory.com/14

 

자바로 작성된 애플리케이션은 모두 JVM에서만 실행되기 때문에,

자바 애플리케이션을 실행하기 위해서는 반드시 JVM이 필요하다.

 

JVM 구조

출처 : https://velog.io/@dmchoi224/JVM%EC%9D%B4%EB%9E%80-2-JVM-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C%EC%99%80-%EC%97%AD%ED%95%A0-%EC%A0%95%EB%A6%AC

 

 

JVM은 크게 아래 4가지 구성이 있다

Class loader

: 자바 바이트 코드가 담긴 클래스들을 해석하고 메모리에 적재하는 컴포넌트

  런타임 환경에서 패키지안에 있는 클래스를 동적으로 로드한다.

  즉, 한번에 메모리에 모든 클래스를 로드하는게 아닌 필요한 순간에 해당 클래스(.class) 파일을 찾아

  메모리에 로딩해주는 역할을 한다.

Interpreter

: 자바 컴파일러에 의해 변환된 바이트 코드를 읽고 한 줄씩 기계어로 해석하는 역할을 한다.

 

JIT 컴파일러(Just-In Time compiler)

: 실행 시점에 인터프리터 방식으로 기계어 코드를 생성 할 때 자주 사용되는 메소드를 컴파일하고 기계어를 캐싱하여

  호출 할 떄마다 해석하는 것을 방지한다.

인터프리터 방식의 단점을 보완하기 위해 도입되었다.

런타임 중에 여러번 호출되는 메소드들에 대한 번역판을 미리 만들어놔서 컴파일을 더 용이하게 해준다.

 

가비지 컬렉터(garbage collector)

가비지 컬렉터(garbage collector)는 메모리를 자동으로 관리해줘서 개발자가 비즈니스 로직에 더 집중할 수 있게 해준다.

 

상황에 따라 효율적인 GC를 위해 선택할 수 있는 Collector

  • Serial Collector: 단일 스레드로 작동하여, 스레드 통신 오버헤드가 없는 Collector
  • Parallel Collector: 다중 스레드로 작동하여, 처리율이 비교적 높은 Collector
  • CMS: mark와 sweep 단계를 통해 청소하는 동시적인 Collector
  • G1: 높은 처리율을 위해, 목표로 하는 stop-the-world 시간을 맞추려고 하는 동시적인 Collector
    • stop-the-world: GC를 위해 모든 스레드가 멈추는 시간
    • CMS을 대체하기 위해 탄생했으며, Java 9부터 기본 설정임
  • ZGC: 매우 큰 Heap에서의 낮은 지연 시간을 목표로 하는 동시적인 Collector
    • Java 11부터 지원하는 실험적인 기능

'Java' 카테고리의 다른 글

비트 연산자 정리  (0) 2023.06.02
JDK 와 JRE 정리  (0) 2023.06.02
JAVA의 특징  (0) 2023.06.01